在Azure Devops 2020 yaml管道中使用模板传递参数



我想实现一个yaml管道,这样我就可以设置某些解决方案参数一次,然后在多个管道中使用它。目前我有:

azure-pipelines.yml

trigger:
- master
name: $(BuildVersionPrefix).$(DayOfYear)$(Date:HH)
extends:
parameters:
buildTemplate: build.yml
template: solutions.yml

solutions.yml

parameters:
- name: buildTemplate
type: string
default: ""
extends:
template: ${{parameters.buildTemplate}}
parameters:
solutions: 
- name: a
SomeOtherProperty: x
- name: b
SomeOtherProperty: y
- name: c
SomeOtherProperty: z
- name: d
SomeOtherProperty: u
- name: e
SomeOtherProperty: v

build.yml

parameters:
- name: solutions
type: object
default: []
steps:
- ${{ each solution in parameters.solutions}}:
- script: echo ${{solution.name}}
displayName: build ${{solution.name}}

有了这个配置,我需要每个管道有两个yml文件,一个可以跨多个管道共享。是否有一种方法,每个管道有一个yml文件,而抽象出的解决方案到一个单一的共享文件?

编辑1

为了强调我们需要解决方案的完整语法,我添加了不同值的SomeOtherProperty

是否有一种方法可以在每个管道中有一个yml文件,同时将解决方案抽象为单个共享文件?

您可以尝试以下示例:

BuildandSolution.yml:

parameters:
- name: solutions
type: object
default: [a,b,c,d,e]
steps:
- ${{ each solution in parameters.solutions }}: 
- script: echo ${{ solution }}
displayName: build ${{ solution }}

Azure-Pipelines.yml:

trigger:
- none
pool:
vmImage: 'ubuntu-latest'
steps:
- template: buildandsolution.yml

您可以直接将值添加到解决方案参数(对象类型)中。

更新:

我可以理解您的要求,但恐怕我们不能从构建步骤中单独指定解决方案参数。

下面是两个代码块:

1。定义对象类型参数的格式不能在定义参数时直接使用:

solutions: 
- name: a
SomeOtherProperty: x

这个定义方法需要依赖于另一个模板。

2。我们不能只在模板中定义参数而不添加任何构建步骤。

此方法仅支持变量。

parameters字段不能在yaml中调用参数模板。因此,如果只定义纯形参,则不能在主脚本中调用它们。

相关内容

  • 没有找到相关文章

最新更新