如何在Azure DevOps中从一个项目的流水线触发另一项目的流水线
跨项目触发Azure DevOps流水线解决方案
方案1:配置内置服务账号权限(直接复用$(System.AccessToken))
该方案可以直接解决你调用REST API返回401的权限问题:
- 打开**第二个项目(被触发的目标项目)**的项目设置页,进入「权限」板块
- 切换到「用户」标签,搜索名为
Project Collection Build Service (你的组织名称)的服务账号 - 将该账号加入第二个项目的
Contributor角色,或者单独为其分配生成/队列生成的权限 - 回到第一个项目的流水线配置,打开作业的安全设置,勾选「允许脚本访问OAuth令牌」,如果是YAML流水线可以直接在步骤中声明环境变量:
steps: - task: PowerShell@2 env: SYSTEM_ACCESSTOKEN: $(System.AccessToken) inputs: targetType: 'inline' script: | $header = @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" } $body = @{ definition = @{ id = <目标流水线ID> } } | ConvertTo-Json Invoke-RestMethod -Uri "https://dev.azure.com/你的组织名/第二个项目名/_apis/pipelines/目标流水线ID/runs?api-version=7.1-preview.1" -Method Post -Headers $header -Body $body -ContentType "application/json" - 配置完成后重新运行第一个流水线即可正常调用API触发第二个项目的流水线
方案2:使用PAT令牌(无需修改服务账号权限)
如果你不想调整项目权限配置,可以使用个人访问令牌实现:
- 使用同时拥有两个项目流水线操作权限的账号,创建PAT,权限范围勾选「生成 - 读取并执行」,有效期按需设置
- 将生成的PAT存入第一个项目的流水线变量,勾选「保密变量」选项,变量名可设为
CROSS_PROJECT_PAT - 调用触发流水线的REST API时,将认证头的令牌替换为该保密变量即可
方案3:使用官方任务(零代码调用)
不需要手动写API请求,直接使用Azure DevOps内置任务配置即可:
- 在第一个流水线的末尾步骤添加「触发Azure管道」任务
- 按提示填写配置:选择所属组织、第二个项目名称、目标流水线ID、触发分支、传参等内容
- 按方案1的要求配置服务账号权限后即可直接使用
注意:如果两个项目归属不同的Azure DevOps组织,仅支持使用方案2的PAT令牌方式实现跨组织触发
内容的提问来源于stack exchange,提问作者Diggy
相关产品推荐
相关产品推荐

