Как мне дождаться завершения работы Google App Engine до sh? - PullRequest
0 голосов
/ 14 июля 2020

В моем процессе 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.

1 Ответ

1 голос
/ 14 июля 2020

Вы можете проверить, выполняется ли операция, с помощью этой команды:

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, чтобы избежать конфликта, и узнать, на какой операции возник конфликт.

...