google-cloud-firestore - 如何更优雅地等待 Firestore 索引部署完成
问题描述
部署 Firestore 索引的问题在于它们是长时间运行的操作。这意味着在所有索引都更新之前,部署调用已经返回(请参阅此链接)。例如,使用 Google Cloud Build 时:
- name: gcr.io/${PROJECT_ID}/firebase
args: ['deploy', '--project=${PROJECT_ID}', '--only=firestore:indexes']
如何在 CI/CD 构建脚本中等待完成?我在迁移 Firestore 数据的构建脚本中有另一个连续步骤,但这取决于此索引更新步骤的成功补充。
一种方法是轮询完成,使用此命令
gcloud firestore operations list
并检查是否有运行类型type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata
的操作
但是,这似乎很棘手且容易出错。有谁知道更好的方法?
解决方案
有一个 gcloud 命令可以检查文档中提到的操作状态。
Command : gcloud firestore operations describe operation-name
为了过滤掉已完成的特定操作,您可以按照文档中的说明相应地使用过滤器:
command : gcloud firestore operations list --filter="done:true"
您可以编写一个 bash 脚本来迭代检查索引完成状态,直到完成才退出。当操作完成时,操作描述将包含“done”:true。请注意,workEstimated 值只是一个估计值,不能用于准确预测操作需要多长时间。此方法还必须考虑 Cloud Build超时值,因为这些索引构建时间可能很长。
或者,您也可以在成功完成第一个云步骤后,下一个连续的云构建步骤将运行,如下例所示:-
- name: 'gcr.io/cloud-builders/go'
args: ['install', 'mytarget']
id: 'go-install'
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/mytarget', '.']
waitFor: ['go-install']
推荐阅读
- sql - Oracle SQL 查询优化 - 基于 varchar 字段获取计数
- c# - asp.net 将记录插入数据库
- r - PAM 算法中初始中心点的选择
- c# - 查找范围之间的 IP(IPv4 和 IPv6)地址
- c# - C#调用Fortran:32位工作,64位无法加载fortran DLL
- java - 尝试两次将同一个孩子写到firebase
- xamarin - 真的可以使用 Xamarin Forms 共享所有视图和视图控制器吗?
- python - 在 Anaconda 环境中使用 Openvino 的 OpenCV 构建
- python - django 应用程序在 heroku TypeError 上崩溃:预期的 str、字节或 os.PathLike 对象,而不是函数
- svn - 每个仓库的 TortoiseSVN 代理设置,而不是全局?