You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GCP中用cloudbuild.yaml搭建CI/CD流水线并解决镜像拉取报错

问题解决方法

报错根因

你当前配置的第2个构建步骤直接指定了第一步才会构建的自定义镜像作为执行环境,Cloud Build默认会在启动所有构建步骤前预先拉取所有步骤用到的镜像,此时第一步还没完成镜像构建推送,拉取不存在的镜像多次重试失败就会抛出该错误。

解决方案

方案1:修改第二步的拉取策略(推荐,改动最小)

给第二个步骤添加pull: NEVER参数,强制Cloud Build使用本次构建过程中生成的本地镜像,不需要提前从远端仓库拉取:

substitutions:
  _DOCKER_COMPOSE_VERSION: 1.28.2
steps:
- name: 'docker/compose:1.28.2'
  args:
  - 'build'
  - '--build-arg'
  - 'DOCKER_COMPOSE_VERSION=${_DOCKER_COMPOSE_VERSION}'
  - '-t'
  - 'gcr.io/$PROJECT_ID/cloudbuild-demo-dockercompose:latest'
  - '-t'
  - 'gcr.io/$PROJECT_ID/cloudbuild-demo-dockercompose:${_DOCKER_COMPOSE_VERSION}'
  - '.'
# 第二个步骤新增pull: NEVER配置
- name: 'gcr.io/$PROJECT_ID/cloudbuild-demo-dockercompose'
  pull: NEVER
  args: ['version']

images:
- 'gcr.io/$PROJECT_ID/cloudbuild-demo-dockercompose:latest'
- 'gcr.io/$PROJECT_ID/cloudbuild-demo-dockercompose:${_DOCKER_COMPOSE_VERSION}'
tags: ['cloud-builders-community']

方案2:拆分构建和验证流程

如果需要从远端拉取镜像验证,可以把构建推送镜像和验证拆成两个独立的构建任务,第一个任务完成镜像推送后再触发第二个验证任务。

额外权限排查

如果修改配置后还是报错,需要确认Cloud Build默认服务账号的权限:

  • Cloud Build默认服务账号格式为[项目编号]@cloudbuild.gserviceaccount.com,可在Cloud Build控制台查看对应账号
  • 给该账号授予对应镜像仓库的读写权限,GCR场景授予镜像关联存储桶的roles/storage.objectAdmin权限,Artifact Registry场景授予roles/artifactregistry.writer权限

内容的提问来源于stack exchange,提问作者Penguen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:24:07