我有一个 Azure DevOps 管道 (Pipeline1),应该在另一个管道 (Pipeline2) 完成时触发。为此,我已经实现了文档中描述的管道资源 -
但是,它根本不起作用。实际上,Pipeline2 将在创建或手动创建新 PR 时触发。我已经测试了创建新 PR、多次更新 PR 以及多次手动运行,但无论我做什么Pipeline1 都不会触发。
我尝试了 YAML 架构参考中定义的两个示例,并进一步阅读 Trigger one pipeline after another 文档,我尝试在所有分支通配符前添加 refs/heads/
。>
我必须怎么做才能让它发挥作用?
branchs
明确定义 -
resources:
pipelines:
- pipeline: pipeline2
source: Pipeline2
trigger: true
明确定义所有 branches
-
resources:
pipelines:
- pipeline: pipeline2
source: Pipeline2
trigger:
branches:
- "*"
用 branches
前缀所有 refs/heads/
通配符 -
resources:
pipelines:
- pipeline: pipeline2
source: Pipeline2
trigger:
branches:
- refs/heads/*
遗憾的是,pipelines
资源似乎不适用于 PR。为什么会这样,我不能告诉你。
经过进一步调查后,我在 sprint 更新中偶然发现了 Incoming Webhook Service Connection。此更新是从六个月前开始的,在撰写本文时,YAML schema reference 中没有添加任何内容。
然而,事实证明这个功能只是doesn't work句号,即使它做了它看起来也只会触发管道的默认分支,这对我们没有好处(可能也没有好处对于大多数用例)。
我最终找到了一些一年前的 documentation on GitHub,但不幸的是,这似乎只能证实 Incoming Webhook Service Connection 在这种情况下对我们没有用。
答案 0 :(得分:0)
对我来说是这样的
resources:
pipelines:
- pipeline: build_pipeline
source: kmadof.devops-manual (14)
branch: master
trigger:
branches:
- '*'
steps:
- bash: env | sort
- task: Bash@3
inputs:
targetType: 'inline'
script: |
echo 'Hello world'
所以在你的情况下,我会试试这个:
resources:
pipelines:
- pipeline: pipeline2
source: Pipeline2
branch: master
trigger:
branches:
- '*'
答案 1 :(得分:0)
Pipeline2
是由 PR 触发的,所以触发流水线运行的源分支(Build.SourceBranch
)是 PR 合并分支( refs/pull/{PR_ID}/merge
).
我也用你上面发布的 3 种方式进行了测试,只有第一种方式可以按预期工作。
根据我的进一步调查,管道资源触发器上的分支过滤器似乎仅适用于您可以在“Repos/Branches”页面上看到的存储库分支。这些分支具有相同的前缀“refs/heads/
”。 PR 合并分支 (refs/pull/{PR_ID}/merge
) 似乎不包括在内。
就您而言,第一种方法应该可行。您需要检查以下事项:
source
”键指定了正确的管道名称 Pipeline2。project
”键指定 Pipeline2 所在的正确项目,并确保这些项目在相同的组织。