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

如何在Cloud Build触发的Pub/Sub消息中传递自定义标签?

问题描述

当前搭建的DevOps流水线流程如下:

  • 向源代码分支推送代码
  • Cloud Build触发器执行Docker镜像构建
  • 构建完成后,Cloud Pub/Sub推送消息至Cloud Functions,触发VM部署流程

问题点:为Cloud Build配置了标签log-test,但该标签始终无法传递至Cloud Functions。
相关配置截图:
Cloud Build配置界面截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:51:29