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

基于Cloud Build-Cloud Deploy-Cloud Run的主分支发布流水线配置问题

解决方案:基于Google无服务器服务的完整发布流水线配置

你的整体架构思路完全正确:通过GitHub主分支触发Cloud Build完成构建、测试、镜像推送,再通过Cloud Deploy分阶段部署到Cloud Run的测试、预发布、生产环境,这套流程完全适配Google无服务器生态。问题出在错误使用了Rollout资源——它是Cloud Deploy自动生成的内部资源,无需手动创建,正确的方式是通过创建Release触发部署流水线。

一、提前配置Cloud Deploy基础资源

首先需要一次性创建Cloud Deploy的核心配置(Delivery Pipeline和各环境Target),这些资源不需要每次构建都重复创建。

1. 定义Delivery Pipeline(delivery-pipeline.yaml)

这个文件描述发布流水线的阶段划分(测试→预发布→生产),以及各阶段的审批规则:

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
  name: my-delivery-pipeline
  namespace: default
spec:
  stages:
  - name: deploy-to-test
    targetId: test-target
  - name: deploy-to-staging
    targetId: staging-target
    requiresApproval: true # 预发布环境需手动审批
  - name: deploy-to-prod
    targetId: prod-target
    requiresApproval: true # 生产环境需手动审批

2. 定义测试环境Target(target-test.yaml)

每个Target对应一个Cloud Run部署环境,这里以测试环境为例:

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: test-target
  namespace: default
spec:
  run:
    location: europe-west3
    service: my-server # 你的Cloud Run服务名称

预发布、生产环境的Target配置可复制上述文件,修改name、location和service字段即可。

3. 初始化Cloud Deploy资源

在本地或Cloud Shell执行以下命令创建上述资源:

gcloud deploy apply --file=delivery-pipeline.yaml --region=europe-west3
gcloud deploy apply --file=target-test.yaml --region=europe-west3
# 重复执行创建预发布、生产环境的Target

二、修改Cloud Build配置(cloudbuild.yaml)

替换原有的Rollout部署步骤,改为创建Cloud Deploy Release,同时补充单元测试步骤、使用提交哈希作为镜像标签(避免latest标签覆盖问题):

steps:
  # 执行单元测试(根据你的技术栈调整镜像和命令)
  - name: 'node:18'
    args: ['npm', 'test']
    id: 'run-unit-tests'

  # 构建Docker镜像
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/my-project/my-server:$COMMIT_SHA', '.']
    id: 'build-image'
    waitFor: ['run-unit-tests']

  # 推送镜像到容器 registry
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/my-project/my-server:$COMMIT_SHA']
    id: 'push-image'
    waitFor: ['build-image']

  # 创建Cloud Deploy Release,触发测试环境部署
  - name: 'gcr.io/cloud-builders/gcloud'
    args: [
      'deploy', 'releases', 'create', 'release-$COMMIT_SHA',
      '--delivery-pipeline=my-delivery-pipeline',
      '--region=europe-west3',
      '--images=my-server=gcr.io/my-project/my-server:$COMMIT_SHA'
    ]
    id: 'create-cloud-deploy-release'
    waitFor: ['push-image']

三、流水线运行流程说明

  1. 代码合并到GitHub main分支后,自动触发Cloud Build执行上述步骤:

    • 先跑单元测试,失败则终止流水线
    • 构建并推送带唯一提交哈希的镜像
    • 创建Cloud Deploy Release,自动触发测试环境的Cloud Run部署
  2. 测试环境验证通过后,可通过以下方式推广到后续环境:

    • 在Cloud Console的Cloud Deploy界面手动审批并推广
    • 使用命令行:gcloud deploy releases promote release-$COMMIT_SHA --delivery-pipeline=my-delivery-pipeline --region=europe-west3 --to-stage=deploy-to-staging

四、权限说明

确保Cloud Build服务账号拥有以下关键角色:

  • roles/clouddeploy.releaser:创建和管理Cloud Deploy Release
  • roles/run.developer:部署Cloud Run服务
  • roles/storage.admin:推送镜像到容器Registry

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:22:43