GCP: Сборка предварительного просмотра при запуске в облаке завершается неудачно из-за отсутствия тега «последняя версия»

# #github #google-cloud-platform #google-cloud-run #google-cloud-build

Вопрос:

Если есть проблема, из-за которой облачная сборка не удается создать предварительную сборку для использования в запросах на вывод на github.

У меня есть

  • организация github с установленным приложением cloud build.
  • настройка облачной сборки с триггерами для развертывания в облачном запуске
  • функциональная сборка на основе мастер-развертывания (здесь это не имеет значения).

Вот мое cloudbuild-preview.yaml личное дело. Неудачный шаг-последний: «ссылка на версию по запросу»

 steps:
  - id: "build image"
    name: "gcr.io/cloud-builders/docker"
    args:
      [
        "build",
        "-t",
        "$_GCR_HOSTNAME/${PROJECT_ID}/${_SERVICE_NAME}:${_PR_NUMBER}-${SHORT_SHA}",
        ".",
      ]

  - id: "push image"
    name: "gcr.io/cloud-builders/docker"
    args:
      [
        "push",
        "$_GCR_HOSTNAME/${PROJECT_ID}/${_SERVICE_NAME}:${_PR_NUMBER}-${SHORT_SHA}",
      ]

  - id: "deploy revision with tag"
    name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: "gcloud"
    args:
      [
        "beta",
        "run",
        "deploy",
        "${_SERVICE_NAME}",
        "--platform",
        "managed",
        "--region",
        "${_REGION}",
        "--image",
        "$_GCR_HOSTNAME/${PROJECT_ID}/${_SERVICE_NAME}:${_PR_NUMBER}-${SHORT_SHA}",
        "--tag",
        "pr-${_PR_NUMBER}",
        "--no-traffic",
      ]

  - id: "link revision on pull request"
    name: "$_GCR_HOSTNAME/${PROJECT_ID}/deployment-previews" # our custom builder
    args:
      [
        "set",
        "--project-id",
        "${PROJECT_ID}",
        "--region",
        "${_REGION}",
        "--service",
        "${_SERVICE_NAME}",
        "--pull-request",
        "${_PR_NUMBER}",
        "--repo-name",
        "${_GITHUB_REPO}",
        "--commit-sha",
        "${SHORT_SHA}",
      ]
timeout: 1400s
options:
  machineType: N1_HIGHCPU_8
substitutions:
  _GCR_HOSTNAME: eu.gcr.io
  _SERVICE_NAME: redacted-service
  _REGION: europe-west4
  _GITHUB_REPO: $(pull_request.pull_request.head.repo.full_name)
 

Выполнение завершается с ошибкой

 Step #3 - "link revision on pull request": Error response from daemon: manifest for eu.gcr.io/redacted-org/deployment-previews:latest not found: manifest unknown: Failed to fetch "latest" from request "/v2/redacted-org/deployment-previews/manifests/latest".
Step #3 - "link revision on pull request": Using default tag: latest
Step #3 - "link revision on pull request": Pulling image: eu.gcr.io/redacted-org/deployment-previews
Starting Step #3 - "link revision on pull request"
 

Чего я не понимаю, так это того, почему sep даже ищет тег :последняя версия. Там его нет. Описанные выше шаги не создают его. Реестр контейнеров не содержит такового.
Как указать на этом шаге сборки, чтобы использовать правильное изображение, помеченное тегом ${_PR_NUMBER}-${SHORT_SHA} ?
Где я могу погрузиться в магию здесь? Где определение этого волшебного шага сборки?!

Большое вам спасибо за любые идеи.

Комментарии:

1. Какая версия вашего развертывания-предыдущая, которая у вас есть в реестре контейнеров? У вас есть последняя версия с тегами? Другой номер версии? Номер Ша? Можете ли вы попытаться указать версию на этапе сборки?

2. на этапе создания push-изображения я загружаю изображение, как указано, помеченное номером PR и коротким SHA: ${_PR_NUMBER}-${SHORT_SHA} . Шаблон для этой конфигурации облачного запуска получен от Google: cloud.google.com/run/docs/tutorials/…

3. Будет трудно понять это, не видя полных журналов выполнения, потому что в какой-то момент он должен откуда-то получить последний тег, но трудно понять, на каком шаге он получает его без журналов, не могли бы вы поделиться этим?

Ответ №1:

Если вы не укажете тег изображения, инструменты всегда будут пытаться извлечь :latest изображение. В облачной сборке вы можете указать конкретную версию образа компоновщика, просто включив тег в название шага сборки:

   - id: "link revision on pull request"
    name: "$_GCR_HOSTNAME/${PROJECT_ID}/deployment-previews:${_PR_NUMBER}-${SHORT_SHA}" # our custom builder
    args:
      [
        "set",
        "--project-id",
        "${PROJECT_ID}",
        "--region",
        "${_REGION}",
        "--service",
        "${_SERVICE_NAME}",
        "--pull-request",
        "${_PR_NUMBER}",
        "--repo-name",
        "${_GITHUB_REPO}",
        "--commit-sha",
        "${SHORT_SHA}",
      ]