上下文
Azure管道支持不同类型的CI触发器(文档)。
例A:
trigger:
branches:
include:
- master如果主分支中检测到新提交,则管道将运行。
例B:
trigger:
branches:
include:
- refs/tags/v*如果检测到以v开头的新标记,管道将运行。
当上述两个条件都为true时,我希望我的管道能够运行:分支和标记。
示例C(不按需要工作):
trigger:
branches:
include:
- master
- refs/tags/v*将这两个触发器组合起来似乎是一种或-条件,而不是和条件。
问题
只有在有新的master标记时,我才能在v*分支上触发管道?
发布于 2020-05-22 12:12:09
在我看来,这是不可能的。跟随文档
如果结合包含文件路径的分支筛选器指定标记,则如果满足分支筛选器,并且满足标记或路径筛选器,则触发器将触发。
不幸的是,在这里添加条件是没有帮助的,因为我们没有足够的信息。例如,对于tag触发器,我们有
BUILD_SOURCEBRANCH=refs/tags/release-07
BUILD_SOURCEBRANCHNAME=release-07对于branch触发器来说:
BUILD_SOURCEBRANCH=refs/heads/master
BUILD_SOURCEBRANCHNAME=master即使您尝试使用git branch手动检查分支名称,您也会得到:
* (HEAD detached at 154ce86)对我来说,这是开发者社区特性请求的一个很好的候选。
发布于 2020-06-05 11:25:06
我找到了一种通过使用模板和参数来实现这一点的方法。
示例
首先,创建一个具有参数化任务和脚本的common.yaml:
parameters:
- name: myMessage
type: string
default: 'Hello from template!'
- script: |
echo ${{ parameters.myMessage }}此yaml可以包含任意数量的参数、共享任务和脚本。
然后,为主分支创建一个master.yaml:
trigger:
branches:
include:
- master
extends:
template: common.yml
parameters:
myMessage: 'Hello from master!' # Overrides default parameter value为每个新版本标记创建另一个tags.yaml:
trigger:
branches:
include:
- refs/tags/v*
extends:
template: common.yml
parameters:
myMessage: 'Hello from tags!' # Overrides default parameter value最后,在Azure DevOps web界面中创建两个管道。将一个管道连接到master.yaml,另一个连接到tags.yaml。
使用此设置,每个触发器都独立于最小的yaml复制。
https://stackoverflow.com/questions/61953776
复制相似问题