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
相关产品推荐
相关产品推荐

