使用模板在 Azure Devops 2020 yaml 管道中传递参数
Using templates to pass paramters in an Azure Devops 2020 yaml pipeline
我想实现一个 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
不同的值
Is there a way to have one yml file per pipeline while abstracting out the solutions into a single shared file?
您可以尝试以下示例:
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.The定义对象类型参数的格式在定义参数时不能直接使用:
solutions:
- name: a
SomeOtherProperty: x
该定义方式需要依赖其他模板
2.We 不能只在模板中定义参数而不添加任何构建步骤。
只有变量支持此方法。
参数字段无法调用yaml中的参数模板。所以,如果只定义纯参数,是不能在主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
不同的值
Is there a way to have one yml file per pipeline while abstracting out the solutions into a single shared file?
您可以尝试以下示例:
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.The定义对象类型参数的格式在定义参数时不能直接使用:
solutions:
- name: a
SomeOtherProperty: x
该定义方式需要依赖其他模板
2.We 不能只在模板中定义参数而不添加任何构建步骤。
只有变量支持此方法。
参数字段无法调用yaml中的参数模板。所以,如果只定义纯参数,是不能在主yaml中调用的。