如何在Cloud Build触发的Pub/Sub消息中传递自定义标签?
问题描述
当前搭建的DevOps流水线流程如下:
- 向源代码分支推送代码
- Cloud Build触发器执行Docker镜像构建
- 构建完成后,Cloud Pub/Sub推送消息至Cloud Functions,触发VM部署流程
问题点:为Cloud Build配置了标签log-test,但该标签始终无法传递至Cloud Functions。
相关配置截图:
Cloud Functions中打印输出的Pub/Sub消息JSON数据如下:
{ "id": "XXX", "status": "SUCCESS", "source": { "repoSource": { "projectId": "XXX", "repoName": "XXX", "commitSha": "XXX" } }, "createTime": "2022-06XXXXX", "startTime": "2022-XXX:41:11XXX", "finishTime": "2022-06-08T07XXX", "results": { "images": [ { "name": "XXX", "digest": "XXX", "pushTiming": { "startTime": "2022-06-XXX3733Z", "endTime": "2022-0XXX26.388064947Z" } } ], "buildStepImages": [ "XXX" ], "buildStepOutputs": [ "" ] }, "steps": [ { "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "XXX", "." ], "timing": { "startTime": "2022-06XXX169Z", "endTime": "2022-06XXX16549Z" } } ], "logging": "XXX", "dynamicSubstitutions": XXX, "pool": {}, "logUrl": "https://console.cloud.google.cXXX", "substitutions": { "TRIGGER_BUILD_CONFIG_PATH": "", "REPO_NAME": "XXX", "REVISION_ID": "XXX", "COMMIT_SHA": "XXX", "SHORT_SHA": "XXX", "BRANCH_NAME": "master", "REF_NAME": "master", "TRIGGER_NAME": "logtest" }, "tags": [ "trigger-XXX" ], "timing": { "FETCHSOURCE": { "startTime": "2022-XXX109Z", "endTime": "2022-0XXX9740Z" }, "BUILD": { "startTime": "2022-0XXXXX042Z", "endTime": "2022-06-0XXXXX9576Z" }, "PUSH": { "startTime": "202XXXXXX218Z", "endTime": "20XXXXX654Z" } }, "artifacts": { "images": [ "gcr.io/XXX" ] }, "queueTtl": "XXX", "name": "projects/XXX/locations/global/builds/XXXX" }
其中tags字段仅包含系统自动生成的trigger-XXX,没有预期的自定义标签log-test,需要确认是否有其他字段可用于传递自定义标签。
原因说明
你在Cloud Build触发器配置页设置的标签是触发器资源标签,和构建任务的标签是两个独立概念:
- 触发器资源标签仅绑定在触发器这个GCP资源上,用于资源分类、权限管控、成本核算,不会自动注入到该触发器触发的构建任务元数据中,因此不会出现在Pub/Sub推送的构建消息里
- 消息中的
tags字段是构建任务的标签,默认仅会自动添加关联触发器ID生成的trigger-xxx标签,不会继承触发器本身的资源标签。
解决方案
有两种可落地的方式传递自定义标识:
方案1:在构建配置文件中显式声明构建标签
在代码仓库内的Cloud Build配置文件(默认是根目录cloudbuild.yaml)中,显式声明tags字段添加自定义标签,示例配置:
steps: - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/[你的项目ID]/[你的镜像名]', '.'] # 显式添加自定义构建标签 tags: - 'log-test'
配置后重新触发构建,log-test就会出现在Pub/Sub消息的tags数组中,Cloud Functions可直接读取该字段。
方案2:使用自定义替换变量传递
如果不想修改构建配置文件,可在Cloud Build触发器的替换变量配置项中添加自定义键值对,比如设置键为_CUSTOM_TAG,值为log-test:
- 自定义替换变量会自动出现在Pub/Sub消息的
substitutions字段下 - Cloud Functions中直接读取
substitutions._CUSTOM_TAG即可拿到自定义标识,无需依赖tags字段
注意:自定义替换变量的键必须以下划线
_开头,否则会被Cloud Build判定为非法配置。
内容的提问来源于stack exchange,提问作者engineer-x
相关产品推荐
相关产品推荐

