CircleCI中如何在config.yaml获取被合并的源分支名称
CircleCI 合并场景获取源分支名称实现方案
背景说明
CIRCLE_BRANCH 内置变量返回的是CI作业运行所在的分支,当feature分支合并到main后,作业运行在main分支上,因此该变量只会返回main,无法直接获取被合并的源分支名称。
可用方案
方案1:PR/MR触发场景直接读取内置变量
如果你的合并操作是通过PR(GitHub)/MR(GitLab)流程触发,可直接使用CircleCI针对PR事件的专属内置变量CIRCLE_PR_HEAD_REF,该变量会直接返回PR的源分支名称:
# .circleci/config.yaml 配置示例 steps: - run: name: 提取目标分支名称 command: | # PR场景取源分支,普通push场景兜底取当前运行分支 EXPECT_BRANCH=${CIRCLE_PR_HEAD_REF:-$CIRCLE_BRANCH} echo $EXPECT_BRANCH
方案2:无PR流程场景通过Git日志提取
如果是本地合并后直接推送到main分支、没有走PR流程,可以通过Git的合并提交日志提取源分支名称:
steps: - run: name: 从Git提交记录提取合并源分支 command: | # 读取最近一次合并提交的日志,匹配提取源分支名 MERGED_SOURCE_BRANCH=$(git log -1 --merges --pretty=format:'%s' | grep -oP 'Merge branch \'\K[^\']+') # 非合并提交场景兜底取当前运行分支 EXPECT_BRANCH=${MERGED_SOURCE_BRANCH:-$CIRCLE_BRANCH} echo $EXPECT_BRANCH
注意事项
- 方案2仅适用于未开启
squash merge、rebase merge的场景,上述两种合并模式会抹除标准合并提交记录,无法通过日志匹配到源分支名 - 开启
squash merge/rebase merge的场景只能通过方案1的PR专属变量获取源分支名
内容的提问来源于stack exchange,提问作者kabakaba
相关产品推荐
相关产品推荐

