Azure Pipeline在其他仓库提交代码时未触发的问题排查
问题描述
我在名为modules的仓库中有一个YAML流水线配置,目标是当modules、testrepo1或testrepo2仓库的release/test分支有提交时触发流水线,但目前只有modules仓库的提交能触发,testrepo1和testrepo2的提交无法触发。另外补充:develop分支的配置可以正常触发,但feature/test分支不行。
问题配置(release/test分支)
trigger: - release/test pool: name: <REDACTED> demands: - agent.name -equals <REDACTED> # 覆盖Build.BuildNumber的值,用于命名生成的制品(ZIP文件) name: '$(Date:yyyyMMdd)T$(Hours)$(Minutes)$(Seconds)' resources: repositories: - repository: testrepo1 type: git ref: release/test name: <REDACTED>/testrepo1 trigger: branches: include: - release/test - repository: testrepo2 type: git ref: release/test name: <REDACTED>/testrepo2 trigger: branches: include: - release/test stages: - stage: 'BuildAndUploadArtifact' jobs: - job: workspace: clean: all steps: - checkout: self # 核心仓库 - checkout: testrepo1 - checkout: testrepo2 <do a bunch of work in tasks>
正常工作的配置(develop分支)
trigger: - release/test pool: name: <REDACTED> demands: - agent.name -equals <REDACTED> # 覆盖Build.BuildNumber的值,用于命名生成的制品(ZIP文件) name: '$(Date:yyyyMMdd)T$(Hours)$(Minutes)$(Seconds)' resources: repositories: - repository: testrepo1 type: git ref: develop name: <REDACTED>/testrepo1 trigger: - develop - repository: testrepo2 type: git ref: develop name: <REDACTED>/testrepo2 trigger: - develop stages: - stage: 'BuildAndUploadArtifact' jobs: - job: workspace: clean: all steps: - checkout: self # 核心仓库 - checkout: testrepo1 - checkout: testrepo2 <do a bunch of work in tasks>
解决方案
问题根源
对于带斜杠的分支名(如release/test、feature/test),在资源仓库的触发器配置中使用嵌套的branches.include语法时,Azure DevOps的分支匹配逻辑会出现识别异常;而develop这类无斜杠的分支名不会触发该问题。
修复步骤
修改资源仓库的触发器配置,采用以下两种方式之一:
方式1:使用通配符匹配目标分支
resources: repositories: - repository: testrepo1 type: git ref: release/test name: <REDACTED>/testrepo1 trigger: branches: include: - release/* # 匹配所有release/前缀的分支 - repository: testrepo2 type: git ref: release/test name: <REDACTED>/testrepo2 trigger: branches: include: - release/*
方式2:使用短格式分支触发器
如果仅需匹配特定的release/test分支,可改用短格式写法:
resources: repositories: - repository: testrepo1 type: git ref: release/test name: <REDACTED>/testrepo1 trigger: - release/test # 短格式,避免嵌套语法的匹配问题 - repository: testrepo2 type: git ref: release/test name: <REDACTED>/testrepo2 trigger: - release/test
验证步骤
- 将修改后的YAML配置推送至
modules仓库的release/test分支 - 在
testrepo1或testrepo2的release/test分支提交代码,验证流水线是否触发 - 若仍未触发,检查流水线的触发器历史,确认是否存在被过滤的记录
内容的提问来源于stack exchange,提问作者Rattletrap
相关产品推荐
相关产品推荐

