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

如何在Cloud Build YAML中获取GCP Pub/Sub主题推送的消息

Pub/Sub触发Cloud Build时读取消息并做条件分支的实现方案

前置配置:绑定触发器与消息变量

第二个仓库的Cloud Build触发器不要使用代码推送类触发源,新建触发器时选择Pub/Sub消息作为事件类型,绑定第一个仓库发消息的目标主题。
在触发器的替换变量配置区新增自定义变量,例如命名为_RECEIVED_MSG,变量值填写事件路径$(body.message.data)。该路径对应Pub/Sub事件中已经自动完成base64解码的消息正文,无需额外做解码处理。

如果发送的消息是结构化JSON,例如{"env":"prod","tag":"v1.0.0"},可以直接配置多个变量映射具体字段,比如新增_MSG_ENV变量,值填$(body.message.data.env),构建时可以直接拿到对应字段值,无需额外解析全量消息。

YAML中读取消息与条件执行逻辑

配置完成后,即可在构建配置中通过${_RECEIVED_MSG}(你自定义的变量名)直接引用消息内容,结合Cloud Build原生的步骤条件规则,按消息值执行不同构建步骤。
参考配置示例:

steps:
  # 调试步骤:打印接收到的消息,排查问题时用
  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args:
      - '-c'
      - echo "接收到Pub/Sub消息内容:${_RECEIVED_MSG}"

  # 消息值为prod时执行生产环境部署
  - name: 'gcr.io/cloud-builders/gcloud'
    id: deploy-production
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        echo "开始执行生产环境部署流程"
        # 此处填写生产部署的具体构建、部署命令
    when:
      - _RECEIVED_MSG == 'prod'

  # 消息值为staging时执行预发环境部署
  - name: 'gcr.io/cloud-builders/gcloud'
    id: deploy-staging
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        echo "开始执行预发环境部署流程"
        # 此处填写预发部署的具体构建、部署命令
    when:
      - _RECEIVED_MSG == 'staging'

# 声明自定义替换变量,避免非Pub/Sub触发场景下构建校验报错
substitutions:
  _RECEIVED_MSG: 'default'

注意事项

  • 如果接收到的消息为乱码,检查第一个仓库发布消息时的编码格式,使用gcloud pubsub topics publish命令直接传入字符串默认使用UTF-8编码,不会有编码问题;如果发送JSON内容,建议先做转义避免格式错误。
  • 如果变量取值为空,先到Cloud Build的构建日志中查看触发事件的原始payload,确认body.message.data路径下存在目标内容,避免变量映射路径写错。
  • 如果需要在构建步骤中解析JSON格式的全量消息,可以直接在bash步骤中用jq工具提取字段,例如TARGET_BRANCH=$(echo ${_RECEIVED_MSG} | jq -r '.branch')即可拿到消息中branch字段的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:54:21