我的目标是拥有一个也定义触发器的模板文件。我有很多非常相似的管道,我还想预定义触发它们的分支。我的问题是它仍然针对所有分支运行,而不仅仅是模板触发器中定义的分支。这是问题的一个非常简单的例子:
假设 git 中的 template.yml template_repo:
trigger:
branches:
include:
- dev
- main
steps:
- script:|
echo "I only run on dev and main but i do not :("
然后在主 yaml azure-pipelines.yml 我想从这里扩展:
resources:
repositories:
- repository: template_repo
type: git
name: template/template_repo
extends:
template: template.yml@template_repo
现在的问题是,来自 azure-pipelines.yml 的这条管道也在 feature_xyz 分支上触发......不仅在 main 和 dev 上。
解决方法是将 template.yml 中的触发器复制/粘贴到我的所有 azure-pipelines.yml 文件中,但我想知道它是否不适用于扩展,或者我是否做错了什么。 所以我希望旧的堆栈溢出能有所帮助,因为 GPT 似乎在撒谎:D....
您似乎无法从模板定义触发器。管道定义似乎仅从源存储库中获取触发器
pipeline.yml
。
的 文档不太好。提供的唯一真实示例是通过“使用模板实现安全性”,它比封装和重用更倾向于安全性。
了解正在发生的情况的最佳方法是从编辑管道下载 YAML。
如果您要这样做,您会看到管道的最终扩展 YAML 如下所示,并且您的触发器定义未通过:
stages:
- stage: __default
jobs:
- job: Build
displayName: 'Build job'
pool:
vmImage: 'windows-latest'
steps:
- task: CmdLine@2
inputs:
script: |
echo "I only run on dev and main but i do not :("
缺少
trigger
相当于没有指定触发器,这意味着任何更改都会触发管道。
我认为可能有一种解决方法:可以在扩展模板中定义
resources
,并且 repository
定义可以包含触发器定义。由于原始存储库被标记为“self”,我认为您可能能够重载 self 存储库并在那里定义触发器。不幸的是,只有 ref
参数可以是动态的,如果您尝试使 name
属性动态化,则会收到错误。
这不起作用:
# template.yml
resources:
repositories:
- repository: self
type: git
name: ${{ variables['Build.Repository.Name'] }} # error: unsupported
ref: ${{ variables['Build.SourceBranch'] }} # valid
trigger:
branches:
include:
- main
- develop
steps:
- checkout: self