如何等待 Google App Engine 操作完成?

Ray*_*ayB 4 google-app-engine google-cloud-platform

在我的 CI/CD 过程中,我部署了 GAE 应用程序,然后删除旧版本。

有时会出现冲突,部署正在删除版本,然后第二个部署出现并尝试删除相同版本,从而导致如下错误:

Cannot operate on apps/my-gae-service/services/backend/versions/20200713t161545 because an operation is already in progress for apps/my-gae-service/services/core-api/versions/20200713t161545 by 642f0fbd-9633-4aeb-b1cf-71b52c9fdf45.

在运行命令之前等待所有 GAE 操作完成的最佳方法是什么?

这可以通过构建步骤之间的依赖关系来完成,但这并不总是有效,因为似乎是在 GAE 方面的问题。问题是,有时从一个 CLI 命令删除的版本即使在该命令运行完毕后也没有完全消失。我正在向 Google soo 开一张有关此问题的票。

gui*_*ere 11

您可以使用以下命令检查是否有正在进行的操作:

gcloud app operations list --filter=status=PENDING --format=json
Run Code Online (Sandbox Code Playgroud)

您仅过滤 PENDING 操作。如果没有正在进行的操作,则返回[],否则,您将获得详细信息(采用 JSON 格式,您将获得比表格视图更多的详细信息)。

这里你可以看到我更新了一个服务"method": "google.appengine.v1.Services.UpdateService",

[
  {
    "id": "56f9cb4f-4381-4314-9557-f3c676e64f69",
    "op_resource": {
      "metadata": {
        "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
        "insertTime": "2020-07-14T10:13:17.839Z",
        "method": "google.appengine.v1.Services.UpdateService",
        "target": "apps/ProjectID/services/default",
        "user": "myUser@test.com"
      },
      "name": "apps/ProjectID/operations/56f9cb4f-4381-4314-9557-f3c676e64f69"
    },
    "project": "ProjectID",
    "start_time": "2020-07-14T10:13:17.839Z",
    "status": "PENDING"
  }
]
Run Code Online (Sandbox Code Playgroud)

现在您可以在 CI 中执行检查以避免冲突,并且您可以知道哪个操作发生了冲突。