如何通过Cloud Build批量更新所有Cloud Run Jobs的镜像?
实现批量更新Cloud Run Jobs的方案
完全可以实现批量更新,但Cloud Build原生不支持直接传入数组变量遍历,我们可以用逗号分隔的变量+shell循环脚本来搞定,具体步骤如下:
1. 配置触发器的替换变量
在你的Cloud Build触发器的「替换变量」中添加一个名为$_JOB_IDS的变量,值填所有需要更新的作业ID,用逗号分隔,例如:
job-id1,job-id2,job-id3,...,job-idN
2. 修改Cloud Build配置脚本
把原来的单作业更新步骤,替换成循环遍历所有作业ID的脚本步骤,完整配置片段如下:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim' entrypoint: bash args: - '-c' - | # 将逗号分隔的作业ID字符串转为数组 IFS=',' read -ra JOB_ID_LIST <<< "$_JOB_IDS" # 遍历每个作业ID执行更新命令 for JOB_ID in "${JOB_ID_LIST[@]}"; do echo "开始更新Cloud Run Job: $JOB_ID" gcloud beta run jobs update "$JOB_ID" \ --platform=managed \ --image="$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA" \ --labels="managed-by=gcp-cloud-build-deploy-cloud-run,commit-sha=$COMMIT_SHA,gcb-build-id=$BUILD_ID,gcb-trigger-id=$_TRIGGER_ID" \ --region="$_DEPLOY_REGION" \ --quiet echo "完成更新Cloud Run Job: $JOB_ID" done id: Deploy All Cloud Run Jobs
3. 可选优化提示
- 如果你的作业分布在不同区域,可以再添加一个逗号分隔的区域变量
$_DEPLOY_REGIONS,对应每个作业的区域,或者调整脚本逻辑适配多区域场景。 - 若需要在某个作业更新失败时停止整个构建,可在脚本开头添加
set -e;若想忽略失败继续更新其他作业,可在gcloud命令后追加|| echo "更新$JOB_ID失败,继续处理下一个"。 - 确保Cloud Build服务账号拥有
roles/run.admin或足够的权限(如run.jobs.update)来修改Cloud Run Jobs。
内容的提问来源于stack exchange,提问作者Paul Serre
相关产品推荐
相关产品推荐

