如何在Azure DevOps中当RepoB有推送时触发RepoA的流水线?
GitHub Actions 实现方案
核心思路
借助GitHub的repository_dispatch事件触发RepoA流水线,同时给RepoB配置webhook推送触发信号,无需为RepoB创建流水线。
配置步骤
生成RepoA的访问令牌
进入RepoA的「Settings」→「Developer settings」→「Personal access tokens」,创建一个拥有repo权限的PAT,务必保存好这个令牌。给RepoB配置Webhook
进入RepoB的「Settings」→「Webhooks」→「Add webhook」:- Payload URL:填写
https://api.github.com/repos/[你的用户名]/RepoA/dispatches - 请求方法选
POST,Content-Type设为application/json - Secret栏填刚才生成的PAT
- 触发事件选择「Just the push event」,完成后保存设置。
- Payload URL:填写
配置RepoA的流水线文件
在RepoA的.github/workflows目录下创建或修改流水线YAML文件,添加触发规则:name: .NET Build on RepoB Push on: repository_dispatch: types: [repo_b_push] # 自定义事件标识,需和webhook请求体的event_type对应 jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Restore dependencies run: dotnet restore - name: Build run: dotnet build --no-restore - name: Test run: dotnet test --no-build --verbosity normal(若webhook未指定
event_type,可省略types字段,监听所有repository_dispatch事件)
Azure DevOps 实现方案
方案一:资源触发器(同组织内仓库推荐)
如果RepoA和RepoB在同一个Azure DevOps组织下,直接用资源触发器最简便,无需额外配置webhook:
在RepoA的流水线YAML文件开头添加资源仓库配置和触发器:
resources: repositories: - repository: RepoB type: git name: [你的组织名]/RepoB # 填写RepoB的完整名称 trigger: branches: include: - main # 监听RepoB的main分支推送,可按需修改 trigger: none # 若只想让RepoB触发,关闭RepoA自身的推送触发 jobs: - job: Build pool: vmImage: 'ubuntu-latest' steps: - task: UseDotNet@2 inputs: packageType: 'sdk' version: '8.0.x' - script: dotnet restore displayName: 'Restore Dependencies' - script: dotnet build --no-restore displayName: 'Build Project' - script: dotnet test --no-build --verbosity normal displayName: 'Run Tests'
方案二:Webhook触发跨组织仓库
如果RepoA和RepoB不在同一组织,用webhook调用Azure DevOps的构建API:
- 生成RepoA所在组织的PAT,需拥有「Build」权限。
- 进入RepoB的仓库设置,添加webhook:
- Payload URL:
https://dev.azure.com/[组织名]/_apis/build/builds?definitionId=[RepoA流水线ID]&api-version=7.1-preview.7 - 请求方法选
POST,Headers添加Authorization: Basic [base64编码的PAT(格式为:你的PAT)] - 触发事件选择推送事件。
- Payload URL:
GitLab CI 实现方案
配置步骤
创建RepoA的流水线触发器
进入RepoA的「Settings」→「CI/CD」→「Pipeline triggers」,点击「Add trigger」生成触发器令牌,保存好该令牌。给RepoB配置Webhook
进入RepoB的「Settings」→「Integrations」:- URL填写
https://gitlab.com/api/v4/projects/[RepoA项目ID]/trigger/pipeline - 触发事件勾选「Push events」
- 在「Secret token」栏填刚才的触发器令牌,可额外添加参数
ref=main(指定触发RepoA的main分支流水线) - 保存配置。
- URL填写
RepoA的流水线配置
正常编写.gitlab-ci.yml即可,触发器会自动触发流水线:stages: - build - test build: stage: build image: mcr.microsoft.com/dotnet/sdk:8.0 script: - dotnet restore - dotnet build --no-restore test: stage: test image: mcr.microsoft.com/dotnet/sdk:8.0 script: - dotnet test --no-build --verbosity normal
内容的提问来源于stack exchange,提问作者user20291437

