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

如何查询Bitbucket PR触发的AWS CodePipeline对应提交的更新文件

需求实现方案

该需求完全可以实现,推荐优先通过CodeBuild内置的Git能力获取变更文件列表,操作步骤如下:

  • 利用CodeBuild默认注入的环境变量获取必要的提交/分支信息:
    • CODEBUILD_RESOLVED_SOURCE_VERSION:本次触发管道的对应提交哈希值
    • CODEBUILD_WEBHOOK_BASE_REF:PR触发时的目标分支名
    • CODEBUILD_WEBHOOK_EVENT:触发事件类型,可用来区分PR触发还是普通分支推送
  • 拉取完整Git历史:CodeBuild默认采用浅克隆拉取代码,需先执行git fetch --unshallow获取完整提交记录,避免对比差异时报错
  • 执行Git命令提取变更文件列表:
    PR触发场景下使用三点diff对比目标分支和当前提交,可准确获取本次PR所有新增/修改的文件:
    git diff --name-only origin/$CODEBUILD_WEBHOOK_BASE_REF...$CODEBUILD_RESOLVED_SOURCE_VERSION
    普通分支推送场景下对比当前提交和上一次提交即可:
    git diff --name-only $CODEBUILD_RESOLVED_SOURCE_VERSION^ $CODEBUILD_RESOLVED_SOURCE_VERSION
  • 过滤提取DAG名称:根据你的DAG文件存放目录,用grep过滤对应路径下的文件,提取文件名即可得到和文件名完全一致的DAG名称。
完整buildspec配置示例
version: 0.2
pre_build:
  commands:
    # 拉取全量Git历史避免浅克隆导致提交记录缺失
    - git fetch --unshallow
    # 区分场景获取变更文件列表
    - |
      if [ "$CODEBUILD_WEBHOOK_EVENT" = "PULL_REQUEST" ]; then
        CHANGED_FILES=$(git diff --name-only origin/$CODEBUILD_WEBHOOK_BASE_REF...$CODEBUILD_RESOLVED_SOURCE_VERSION)
      else
        CHANGED_FILES=$(git diff --name-only $CODEBUILD_RESOLVED_SOURCE_VERSION^ $CODEBUILD_RESOLVED_SOURCE_VERSION)
      fi
    # 过滤dags目录下的.py文件,提取无后缀的文件名作为DAG名称
    - DAG_NAMES=$(echo "$CHANGED_FILES" | grep '^dags/.*\.py$' | xargs basename -s .py | uniq)
    # 输出结果供后续步骤使用,也可写入环境变量文件传递到下游
    - echo "待触发DAG列表:$DAG_NAMES"
补充说明
  • 如果需要把提取到的DAG名称传递到后续CodePipeline阶段,可以将结果写入到文件,通过CodeBuild的输出制品传递到下游步骤
  • 该方案不需要调用额外的CodePipeline CLI接口,实现成本低、稳定性高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:36:05