PR中[skip ci]/NO_CI不生效,如何阻止PR触发CI流水线?
问题解决:PR触发流水线时通过[skip ci]跳过执行
为什么当前配置不生效
当流水线由PR触发时,Build.SourceVersionMessage变量存储的是PR合并时自动生成的默认提交信息(如Merge pull request #xxx from ...),而非PR的标题或描述内容。你在PR中填写的[skip ci]不会被这个变量捕获,导致条件判断失效,流水线始终运行。
正确配置方案
修改Job的条件判断逻辑,同时覆盖直接推送master和PR触发两种场景的[skip ci]检查:
trigger: batch: true branches: include: - master pool: vmImage: windows-latest jobs: - job: Build condition: | and( succeeded(), not(or( # 检查直接推送master时的提交信息 contains(variables['Build.SourceVersionMessage'], '[skip ci]'), # 检查PR触发时的标题或描述 and(eq(variables['Build.Reason'], 'PullRequest'), or(contains(variables['System.PullRequest.Title'], '[skip ci]'), contains(variables['System.PullRequest.Description'], '[skip ci]')) ) )) ) steps: - script: echo "Hello world"! displayName: 'Echo Hello world' - script: echo "$(Build.SourceVersionMessage)"! displayName: 'Echo Build.SourceVersionMessage'
配置说明
- 针对直接推送master分支的情况:依然检查提交信息中的
[skip ci],符合官方文档的逻辑 - 针对PR触发的情况:先通过
Build.Reason判断是否为PR触发,再检查PR的标题或描述中是否包含[skip ci],任一满足则跳过Job执行 - 只有当上述两种跳过条件都不满足时,才会执行Build Job
额外方案:完全禁止PR触发流水线
如果你的需求是直接禁止PR触发该流水线,无需通过[skip ci]控制,可以直接修改trigger配置:
trigger: batch: true branches: include: - master pr: none # 禁止所有PR触发该流水线
内容的提问来源于stack exchange,提问作者kopolomo
相关产品推荐
相关产品推荐

