如何在Google Cloudbuild流水线中配置dev分支部署成功后自动合并到prod分支
Google Cloud Build流水线自动合并dev到prod分支的实现方案
前置依赖配置
在新增合并步骤前,你需要先完成权限配置:
- 在GitHub账号下生成具有仓库
repo权限的Personal Access Token(PAT) - 将PAT上传至Google Secret Manager,创建密钥命名为
GITHUB_PAT - 在Cloud Build IAM配置中,为Cloud Build默认服务账号
[项目号]@cloudbuild.gserviceaccount.com授予Secret Manager 秘密访问者角色,确保流水线可以读取密钥内容
方案1:无分支保护场景直接合并(改动最小)
如果你的prod分支没有设置分支保护规则,直接在现有cloudbuild.yaml的dev环境部署步骤之后新增如下步骤即可:
注意需将步骤的
waitFor参数值替换为你自己的dev环境部署步骤的id,确保只有部署成功后才会执行合并操作
steps: # 你原有测试、部署dev环境的步骤保持不变,假设dev部署步骤的id为deploy-dev - name: 'gcr.io/cloud-builders/git' id: 'merge-dev-to-prod' waitFor: ['deploy-dev'] entrypoint: 'bash' args: - '-c' - | # 配置Git身份信息 git config --global user.name "Cloud Build Bot" git config --global user.email "cloudbuild@your-org.com" # 读取GitHub PAT GITHUB_PAT=$(gcloud secrets versions access latest --secret=GITHUB_PAT) REPO_URL="https://${GITHUB_PAT}@github.com/你的GitHub用户名/你的仓库名.git" # 拉取全部分支信息 git fetch --all # 切换到prod分支并合并dev代码 git checkout prod git merge origin/dev --ff-only # 推送合并后的代码到远程 git push ${REPO_URL} prod
- 如果你需要保留合并提交记录,可将
--ff-only参数替换为--no-ff -m "Auto merge dev to prod after dev deployment success" - 如果合并出现冲突,步骤会自动失败,你会收到Cloud Build的失败通知,需手动解决冲突后再合并
方案2:适配有分支保护规则的场景
如果你的prod分支设置了必须走PR、需要审核/CI检查通过才能合并的规则,可以调整为自动创建PR再触发合并的逻辑:
steps: # 你原有测试、部署dev环境的步骤保持不变,假设dev部署步骤的id为deploy-dev - name: 'gcr.io/cloud-builders/curl' id: 'auto-merge-pr' waitFor: ['deploy-dev'] entrypoint: 'bash' args: - '-c' - | GITHUB_PAT=$(gcloud secrets versions access latest --secret=GITHUB_PAT) # 调用GitHub API创建dev到prod的PR PR_RESPONSE=$(curl -s -X POST \ -H "Authorization: token ${GITHUB_PAT}" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/你的GitHub用户名/你的仓库名/pulls \ -d '{"title":"Auto merge dev to prod","head":"dev","base":"prod"}') PR_NUMBER=$(echo ${PR_RESPONSE} | jq -r '.number') # 等待PR前置检查完成(可根据你的CI检查时长调整等待时间) sleep 60 # 调用API合并PR,merge_method可选merge/squash/rebase curl -s -X PUT \ -H "Authorization: token ${GITHUB_PAT}" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/你的GitHub用户名/你的仓库名/pulls/${PR_NUMBER}/merge \ -d '{"merge_method":"squash"}'
- 你需要为GitHub PAT额外授予PR读写和合并权限
- 如果PR不符合分支保护规则(如存在冲突、审核未通过),合并请求会自动失败并触发Cloud Build报错通知
内容的提问来源于stack exchange,提问作者Abhinav Dhiman
相关产品推荐
相关产品推荐

