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

Cloud Build触发后如何获取提交中修改的文件列表?

获取Cloud Build触发时的修改文件列表

有两种可靠的方式可以拿到本次提交中被修改的文件列表,按需选择即可:

方法一:用Git命令直接提取(通用所有代码托管平台)

Cloud Build触发时已经克隆了你的代码仓库,直接通过Git命令对比当前提交和父提交的差异就能拿到修改文件:

在你的cloudbuild.yaml中添加以下步骤:

steps:
  # 提取修改文件并保存到文本,兼容首次提交场景
  - name: 'gcr.io/cloud-builders/git'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        if git rev-parse --verify HEAD^ >/dev/null 2>&1; then
          git diff --name-only HEAD^ HEAD > modified-files.txt
        else
          git diff --name-only HEAD > modified-files.txt
        fi
    id: 'save-modified-files'

  # 示例:后续步骤读取文件执行自定义逻辑
  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        echo "本次修改的文件:"
        cat modified-files.txt
        # 示例逻辑:判断是否包含目标文件
        if grep -q "your/target/file.txt" modified-files.txt; then
          echo "目标文件已更新,执行对应操作..."
        fi

方法二:解析Webhook的提交信息(需匹配托管平台结构)

如果你依赖$(body.commit)获取的提交JSON,可通过jq工具解析出文件列表:

针对GitHub的Webhook

steps:
  - name: 'stedolan/jq'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        echo "$(body.commit)" | jq -r '.files[].filename' > modified-files.txt
    env:
      - 'COMMIT_DATA=$(body.commit)'

针对Cloud Source Repositories的Webhook

它的Webhook结构不同,修改文件路径在body.changes节点下:

steps:
  - name: 'stedolan/jq'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        echo "$(body)" | jq -r '.changes[].files[].path' > modified-files.txt

之后你就可以在后续构建步骤中读取modified-files.txt,基于文件列表实现你的自定义逻辑了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:24:11