Azure构建管道Yaml模板参考

时间:2019-04-17 10:01:33

标签: azure-devops yaml

我有一个逐步定义模板,打算在构建管道中使用。 步骤定义的位置与构建管道本身不在同一文件夹中。

在验证管道期间,AzureDevops将构建管道的位置视为根位置。这被添加到引用的路径

考虑下面的代码层次结构示例

 azure
   |----products
           |----resource-type1
                        |----step-def.yaml
           |----resource-type2
                        |----step-def.yaml
   |----solutions
           |----solution1
                    |----local-step-def.yaml
                    |----build.yaml
           |----solution2
                    |----build.yaml

当build.yaml如下时,以下工作

jobs:
- job: Linux
  pool:
    vmImage: 'ubuntu-16.04'
  steps:
  - template: solution1/local-step-def.yml

如果您按以下方式更改模板引用,则无法使用

  - template: ../products/resource-type1/step-def.yml

在管道上完成验证后,azure-devops映射到

# <path-of-the-build-pipeline>/<template-ref>
azure/solutions/solution1/<template-reference>

这里是文档https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#step-re-use

那么我如何映射到位于产品文件夹层次结构中的step-def.yaml文件?

2 个答案:

答案 0 :(得分:1)

我发现只有一种解决方案可以真正做到这一点。您可以使用绝对路径引用父目录。关键是使用系统变量填充根路径。您的示例的解决方案:

jobs:
- job: Linux
  pool:
    vmImage: 'ubuntu-16.04'
  steps:
  - template: ${{variables['System.DefaultWorkingDirectory']}}/products/resource-type1/step-def.yml

答案 1 :(得分:0)

您可以尝试使用repositoryResource语法,尽管事实上它是相同的存储库,例如

resources:
  repositories:
    - repository: pckgtemplates #resource name to be used in the build pipeline
      type: git #Azure git 
      name: packages/packagesRepo

jobs:
- template: templates\version.file.yml@pckgtemplates  
  parameters:
    versionFile: versionFile

- template: templates\version.file.yml@pckgtemplates引用了version.file.yml资源的templates文件夹中的pckgtemplates模板。

还有pckgtemplate资源引用了当前组织的packages项目和packagesRepo存储库。

使用此方法,您可以定义引用相同项目和products/resource-type1/step-def.yml模板的资源