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

Cloud Build未推送Repo2的Docker镜像至Artifact Registry问题求助

Cloud Build镜像推送异常排查(Repo2无法推送至Artifact Registry)

我在同一GCP项目下,使用相同的服务账号、GitHub账号配置了两个Cloud Build触发器(对应Repo1和Repo2),Artifact Registry中也分别创建了对应仓库。Repo1的Docker镜像可正常推送到Artifact Registry,但Repo2的镜像始终未出现在对应仓库中,且Repo2的构建日志无报错信息,仅停留在打标签阶段:

Step #0: Successfully built 4c46XXXX 
Step #0: Successfully tagged us-docker.pkg.dev/my-project/repo2/main:latest  
Finished Step #0  

对比Repo1的构建日志,包含完整的镜像推送步骤:

Successfully built XXXXX
Successfully tagged us-docker.pkg.dev/my-project/repo1/repo1:latest
PUSH
Pushing us-docker.pkg.dev/my-project/repo1/repo1
The push refers to repository [us-docker.pkg.dev/my-project/repo1/main]
... 
XXX: Layer already exists
XXX: Pushed
latest: digest: sha256:XXXXXX
DONE

Repo1的cloudbuild.yaml配置

steps:
  - name: gcr.io/cloud-builders/docker
    args: [build, -t, $_GCR/$PROJECT_ID/$REPO_NAME/$BRANCH_NAME, "."]
images: [$_GCR/$PROJECT_ID/$REPO_NAME/$BRANCH_NAME]
options:
  logging: CLOUD_LOGGING_ONLY
substitutions:
  _GCR: us-docker.pkg.dev

注:$REPO_NAME为"repo1",对应的Artifact Registry路径为us-docker.pkg.dev/my-project/repo1,推送已确认成功。

Repo2的cloudbuild.yaml配置

steps:
  - name: gcr.io/cloud-builders/docker
    args:
      [
        build,
        -t,
        us-docker.pkg.dev/$PROJECT_ID/$_SERVICE_NAME/$BRANCH_NAME,
        -f,
        Dockerfile,
        ".",
      ]
    id: Build service
  - name: gcr.io/cloud-builders/docker
    entrypoint: docker
    args:
      [
        run,
        SERVICE_NAME=$_SERVICE_NAME,
        $_VM_CLEANUP_IMAGE,
      ]
  id: Deleting oldest VM for service
tags: [$COMMIT_SHA, $TRIGGER_NAME]
images: [us-docker.pkg.dev/$PROJECT_ID/$_SERVICE_NAME/$BRANCH_NAME]
options:
  logging: CLOUD_LOGGING_ONLY
substitutions: 
  _SERVICE_NAME: "repo2"

Rep2对应的Artifact Registry路径为us-docker.pkg.dev/my-project/repo2,当前为空。


已做排查操作

  • 权限检查:两个触发器使用相同服务账号,未发现权限相关报错或提示
  • 查阅Cloud Build官方故障排查文档、部署文档,以及社区常见的镜像推送失败问题案例

可能原因及解决步骤

  1. YAML语法错误导致构建提前终止
    Rep2的cloudbuild.yaml中第二个步骤的id字段缩进错误——它应与name、entrypoint同级,当前写法会被解析为上一个步骤的属性,导致YAML格式异常,Cloud Build可能在执行完第一个步骤后就终止,跳过了镜像推送环节。
    修正后的第二个步骤代码:
  • name: gcr.io/cloud-builders/docker
    entrypoint: docker
    args:
    [
    run,
    SERVICE_NAME=$_SERVICE_NAME,
    $_VM_CLEANUP_IMAGE,
    ]
    id: Deleting oldest VM for service
注意`id`需与`name`对齐,属于第二个步骤的独立属性。

2. **第二个步骤执行失败但日志未完整输出**
虽然日志显示无报错,但第二个步骤的`docker run`命令可能存在执行失败的情况(比如`$_VM_CLEANUP_IMAGE`不存在、参数配置错误),而`logging: CLOUD_LOGGING_ONLY`可能未捕获完整错误信息。可临时修改日志配置为`GCS_ONLY`或`LEGACY`,查看完整构建日志确认第二个步骤的执行状态。

3. **镜像标签路径校验**
确认`us-docker.pkg.dev/$PROJECT_ID/$_SERVICE_NAME/$BRANCH_NAME`与Artifact Registry仓库路径完全匹配:Repo2的仓库路径为`us-docker.pkg.dev/my-project/repo2`,若`$BRANCH_NAME`为`main`,则镜像标签应为`us-docker.pkg.dev/my-project/repo2/main:latest`,该路径本身是合法的,需确保构建能执行到推送环节。

内容的提问来源于stack exchange,提问作者engineer-x
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:20:26