在 azure devops 管道中重新使用 YAML 序列
Re-use YAML sequence inside azure devops pipelines
我想在多个部署中重复使用服务器列表。我在某些模板中所做的简化版本 deploy-tasks.yml
:
parameters:
- name: servers
type: object
- ${{ each server in parameters.servers }}:
- task: CopyFiles@2
inputs:
sourceFolder: ${{parameters.sourceFolder}}
targetFolder: '\${{server}}\some-path'
cleanTargetFolder: true
然后我就可以在这个 pipeline.yml
中使用它
steps:
- checkout: self
- template: deploy-tasks.yml
parameters:
servers:
# How can I define this list somewhere else?!
- server1
- server2
sourceFolder: '$(Build.SourcesDirectory)\something'
到目前为止它有效:但我想提取常用的服务器列表。所以像 infra.yml
:
my-production-webservers:
- production1
- production2
然后类似(但这不起作用):
steps:
- checkout: self
- template: deploy-tasks.yml
parameters:
servers:
!!! something that includes my-production-webservers !!!
sourceFolder: '$(Build.SourcesDirectory)\something'
变量在这种情况下不起作用,因为它们只是字符串。我错过了什么技巧?
恐怕没有这样的方法可以满足您的要求。
正如你所说,变量是字符串类型。因此变量无法将值列表传递给对象类型参数。
模板中只定义参数是无效的,因为主yaml中的parameters字段不能引用模板
因此您不能在yaml模板中只保存参数值。您需要在模板中添加额外的步骤。
解决方法:
您可以尝试以下示例:它不是纯参数。需要引用deploy-tasks.yml file
部署-tasks.yml
parameters:
- name: servers
type: object
default: []
steps:
- ${{ each server in parameters.servers}}:
- script: echo ${{ server }}
infra.yml
parameters:
- name: buildTemplate
type: string
default: ""
steps:
- template: ${{parameters.buildTemplate}}
parameters:
servers:
- Server1
- Server2
- Server3
pipeline.yml
trigger:
- none
pool:
vmImage: ubuntu-latest
steps:
- template: infra.yml
parameters:
buildTemplate: deploy-tasks.yml
我想在多个部署中重复使用服务器列表。我在某些模板中所做的简化版本 deploy-tasks.yml
:
parameters:
- name: servers
type: object
- ${{ each server in parameters.servers }}:
- task: CopyFiles@2
inputs:
sourceFolder: ${{parameters.sourceFolder}}
targetFolder: '\${{server}}\some-path'
cleanTargetFolder: true
然后我就可以在这个 pipeline.yml
steps:
- checkout: self
- template: deploy-tasks.yml
parameters:
servers:
# How can I define this list somewhere else?!
- server1
- server2
sourceFolder: '$(Build.SourcesDirectory)\something'
到目前为止它有效:但我想提取常用的服务器列表。所以像 infra.yml
:
my-production-webservers:
- production1
- production2
然后类似(但这不起作用):
steps:
- checkout: self
- template: deploy-tasks.yml
parameters:
servers:
!!! something that includes my-production-webservers !!!
sourceFolder: '$(Build.SourcesDirectory)\something'
变量在这种情况下不起作用,因为它们只是字符串。我错过了什么技巧?
恐怕没有这样的方法可以满足您的要求。
正如你所说,变量是字符串类型。因此变量无法将值列表传递给对象类型参数。
模板中只定义参数是无效的,因为主yaml中的parameters字段不能引用模板
因此您不能在yaml模板中只保存参数值。您需要在模板中添加额外的步骤。
解决方法:
您可以尝试以下示例:它不是纯参数。需要引用deploy-tasks.yml file
部署-tasks.yml
parameters:
- name: servers
type: object
default: []
steps:
- ${{ each server in parameters.servers}}:
- script: echo ${{ server }}
infra.yml
parameters:
- name: buildTemplate
type: string
default: ""
steps:
- template: ${{parameters.buildTemplate}}
parameters:
servers:
- Server1
- Server2
- Server3
pipeline.yml
trigger:
- none
pool:
vmImage: ubuntu-latest
steps:
- template: infra.yml
parameters:
buildTemplate: deploy-tasks.yml