azuredevops yaml是否支持“扩展”整个管道(包括触发器)

问题描述 投票:0回答:1

我的目标是拥有一个也定义触发器的模板文件。我有很多非常相似的管道,我还想预定义触发它们的分支。我的问题是它仍然针对所有分支运行,而不仅仅是模板触发器中定义的分支。这是问题的一个非常简单的例子:

假设 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....

azure-devops azure-pipelines
1个回答
0
投票

您似乎无法从模板定义触发器。管道定义似乎仅从源存储库中获取触发器

pipeline.yml

extends

 文档不太好。提供的唯一真实示例是通过“使用模板实现安全性”,它比封装和重用更倾向于安全性。

了解正在发生的情况的最佳方法是从编辑管道下载 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
© www.soinside.com 2019 - 2024. All rights reserved.