首页 > 解决方案 > GCP:由于缺少“最新”标签,Cloud Run 预览版构建失败

问题描述

如果有云构建无法创建用于 github 拉取请求的预览构建的问题。

我有

以下是我的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 甚至在寻找 :latest 标签。空无一人。上述步骤不会创建一个。容器注册表不包含一个。如何告诉构建步骤使用标记为的正确图像${_PR_NUMBER}-${SHORT_SHA}?我在哪里可以潜入这里的魔法?这个神奇的构建步骤的定义在哪里?!

非常感谢您的任何想法。

标签: githubgoogle-cloud-platformgoogle-cloud-rungoogle-cloud-build

解决方案


当您不指定图像标签时,工具将始终尝试拉取:latest图像。在 Cloud Build 中,您只需在构建步骤的名称中包含标签即可指定构建器映像的特定版本:

  - 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}",
      ]

推荐阅读