如何配置Circle CI仅在发起PR时运行,合并分支时不执行?
配置Circle CI实现仅针对特定分支的PR触发构建
要实现仅在针对特定分支发起拉取请求(PR)时执行构建,而代码合并到该分支时不触发,你可以通过Circle CI的工作流条件判断和分支过滤来精准控制。以下是具体配置方案:
完整配置示例
假设你希望仅在PR指向main分支时触发构建,合并到main时不执行,以下是.circleci/config.yml的配置:
version: 2.1 # 定义你的构建任务 jobs: build: docker: - image: cimg/base:stable # 根据项目技术栈选择对应镜像 steps: - checkout - run: echo "执行你的构建逻辑,比如依赖安装、测试、打包等" # 配置工作流,控制触发时机 workflows: pr-target-main-build: jobs: - build: # 过滤直接推送到main分支或标签触发的构建 filters: branches: ignore: main tags: ignore: /.*/ # 仅当是PR且目标分支为main时触发 when: << pipeline.git.pr.number >> != '' && << pipeline.git.pr.base_branch >> == 'main'
关键配置说明
分支过滤(filters)
branches.ignore: main:直接排除所有针对main分支的推送/合并操作,避免代码合并到main时触发构建。tags.ignore: /.*/:若无需标签触发构建,可忽略所有标签类触发。
触发条件(when)
<< pipeline.git.pr.number >> != '':判断当前构建是否来自PR(存在PR编号则为PR触发)。<< pipeline.git.pr.base_branch >> == 'main':限定PR的目标分支为main,只有满足该条件的PR才会执行构建。
扩展:针对多个特定分支
如果需要同时针对main和develop分支的PR触发构建,修改when条件即可:
when: << pipeline.git.pr.number >> != '' && (<< pipeline.git.pr.base_branch >> == 'main' || << pipeline.git.pr.base_branch >> == 'develop')
注意事项
- 确保Circle CI项目已开启PR构建支持:在项目设置的「Advanced Settings」中,确认「Build for pull requests」选项处于开启状态。
- 若使用Circle CI旧版本(version 2),可将管道参数替换为环境变量
CIRCLE_PR_NUMBER和CIRCLE_BASE_BRANCH,逻辑保持一致。
内容的提问来源于stack exchange,提问作者Ranjith
相关产品推荐
相关产品推荐

