【问题标题】:How can I wait for a Google App Engine operation to finish?如何等待 Google App Engine 操作完成?
【发布时间】:2020-07-14 18:17:12
【问题描述】:

在我的 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 开一张关于此的票。

【问题讨论】:

    标签: google-app-engine google-cloud-platform


    【解决方案1】:

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

    gcloud app operations list --filter=status=PENDING --format=json
    

    您仅对 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"
      }
    ]
    

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多