我目前正在 Azure DevOps 中将单管道拆分为单独的
build
、test
和 deploy
管道。以下是我设置触发器和资源的方法:
在
build
管道中,我有:
pr:
branches:
include:
- '*'
在
test
管道中,设置为:
resources:
pipelines:
- pipeline: build
source: foobar.build
trigger:
stages:
- Publish
tags:
- build-success
此设置在
test
管道完成 build
阶段并标记为 Publish
后正确触发 build-success
管道。对于拉取请求以及分支构建(如主分支上的分支构建),它按预期工作。
但是,我面临一个问题,即
test
管道中不同阶段的状态不会报告回 GitHub,但此问题仅发生在拉取请求中。对于在主分支上构建的分支,状态报告可以正常工作。
我需要确保 GitHub 在拉取请求触发时准确反映
test
管道中每个阶段的状态(成功/失败)。有没有办法配置 Azure DevOps 将这些阶段状态报告回 GitHub 进行拉取请求?如果无法直接报告,我应该考虑哪些替代方案来实现此功能?
根据您的描述,我创建了管道
foobar.build
和 foobar.test
,并引用了我的 GitHub 存储库的 master
分支中的 YAML 定义。
build.yml
trigger:
- master
# Use code from intermediate branch of PRId
pr:
branches:
include:
- '*'
pool:
vmImage: ubuntu-latest
stages:
- stage: Publish
jobs:
- job: PublishJob
steps:
- script: |
echo "##vso[build.addbuildtag]build-success"
displayName: Add build tag
测试.yml
trigger: none
pr: none # Prevent PR from triggering foobar.test pipeline
resources:
pipelines:
- pipeline: build
source: foobar.build
trigger:
stages:
- Publish
tags:
- build-success
steps:
- script: echo This is the downstream test pipeline
displayName: Run downstream test pipeline
我可以重现该问题,虽然该行为似乎与触发原因无关,而是与管道消耗的源代码相关。
根据分支的
Check status
功能,它仅检查使用此分支中的代码作为资源的管道状态。我们可以看到 foobar.test
管道不受 Check status
的监控,直到foobar.test
管道被触发。
但是,当构建管道由拉取请求触发时,它将使用 PRId
的
中间分支中的代码,而不是目标分支 (
master
) 中的代码。因此,源分支 (dev
) 而不是此 PR 的目标分支将检查此管道运行的状态,并由 PR 触发运行。
此外,PR 合并到 master
分支后,它将通过
Individual CI
触发构建管道,这将处理通过
pipeline completion
触发测试管道。因此,构建和测试管道的运行对于合并后
master
分支的状态检查是可见的。