如何在从另一个存储库扩展模板的管道定义中使用我的模板?

How can I use my template in a pipeline definition that extends a template from another repository?

我有一个从另一个存储库扩展模板的管道。该外部模板采用名为 stagesstageList

我的管道:

resources:
  repositories:
    - repository: templates
      type: git
      name: OtherProject/OtherRepo
      ref: refs/heads/main

extends:
  template: BaseTemplate.yml@templates

  stages:
  - stage: build
    jobs:
    - job: main
      steps:

我的步骤包括一些本地化,我需要为每种语言执行 task。我目前将每种语言手动定义为单独的任务:

- task: MSBuild@1
  displayName: 'Build (de-DE)'
  inputs:
    solution: '$(Build.SourcesDirectory)\MyProject.wixproj'
    msbuildArguments: '/p:Cultures="de-DE"
    ...more args, 15 lines long...

...针对每种语言重复。恶心。

所以我想尝试为此使用模板。但是当我将 MSBuild 任务移动到另一个文件并尝试

- template: ./templates/localizedBuild.yml
  parameters:
    language: 'de-DE'

然后当我去排队管道时 ADO 给我这个错误 运行:

The 'stages' parameter is not a valid StageList. /.pipelines/MyPipeline.yml: File /templates/localizedMsi.yml not found in repository https://company.visualstudio.com/OtherProject/_git/OtherRepo

据我了解,这是因为模板的路径是相对于执行包含的文件计算的...这是 BaseTemplate.yml 文件,而不是 MyPipeline.yml

有没有办法在 yml 中指出我正在尝试引用 my 存储库中的模板?

是的,如果您没有将本地存储库定义为 resources\repository,它会自动声明为 self

尝试添加:

- template:/templates/localizedBuild.yml@self