在 Azure Pipeline YAML 文件的顶层包含模板
Include template at top level in Azure Pipeline YAML file
The documentation 建议应该有一种方法可以获取 Azure Pipeline YAML 模板并将它们粘贴到不同的 Azure Pipeline YAML 文件中。但是,我找不到在顶层执行此操作的方法。我该怎么做?
为了给出一个用例,我有一个名为 deployment-environment.yml
的 YAML 模板,它定义了一个部署环境参数,并使用这个参数来决定实际的部署环境。我想将其包含在多个管道中(例如 azure-pipeline.yml
此处)以避免代码重复。
我在我的主要管道 YAML 文件中想象如下内容:
# azure-pipeline.yml
includes:
- template: deployment-environment.yml
使用以下 YAML 模板:
# deployment-environment.yml
parameters:
- name: deploymentEnvironmentSetting
type: string
default: auto
values:
- auto
- none
- dev
- test
- prod
variables:
- name: deploymentEnvironment
${{ if ne(parameters.deploymentEnvironmentSetting, 'auto') }}:
value: ${{ parameters.deploymentEnvironmentSetting }}
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'development') }}:
value: dev
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'test') }}:
value: test
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'main') }}:
value: prod
${{ else }}:
value: none
这样用户就可以使用 Azure DevOps GUI 手动覆盖部署环境,如 this image 所示。
非常感谢您的帮助!
我测试了一下,似乎 'just' 插入模板和使用关键字 'extends' 都不需要传播其参数
到顶级 yaml 文件,因此 UI 不显示用于选择其中之一的框。
不幸的是,我认为目前实现它的唯一方法是通过添加具有允许值的关键字来复制 'parameters'
在 azure-pipeline.yml 之上,然后将提供的值传递给 deployment-environment.yml.
管道架构中没有 includes
关键字。该文档概述了您可以插入 模板 以供 Stage, Job or Step 重用。
stages:
- template: stages.yml
jobs:
- template: deployment-job.yml
steps:
- template: download-pipeline-artifact-steps.yml
有助于理解azure-pipeline yaml有一个schema并且定义了template
关键字:
还有一个 extends keyword that allows you to describe the pipeline in one file and pass in arguments. The documentation 列出了执行上述操作的示例。
# File: start.yml
parameters:
- name: environmentName
type: string
default: auto
variables:
- ${{ if ne(parameters.environmentName, 'auto'):
- name: environmentName
value: ${{ parameters.environmentName }}
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'development') }}:
- name: environmentName
value: dev
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'test') }}:
- name: environmentName
value: test
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'main') }}:
- name: environmentName
value: prod
${{ else }}:
- name: environmentName
value: none
stages:
- stage: build
pool:
vmImage: windows-latest
jobs:
- job: ci
steps:
- script: deploy to $(environmentName)
# pipeline.yml
trigger:
- main
parameters:
- name: deploymentEnvironmentSetting
type: string
default: auto
values:
- auto
- none
- dev
- test
- prod
extends:
template: start.yml
parameters:
environment: ${{ parameters.deploymentEnvironmentSetting }}
The documentation 建议应该有一种方法可以获取 Azure Pipeline YAML 模板并将它们粘贴到不同的 Azure Pipeline YAML 文件中。但是,我找不到在顶层执行此操作的方法。我该怎么做?
为了给出一个用例,我有一个名为 deployment-environment.yml
的 YAML 模板,它定义了一个部署环境参数,并使用这个参数来决定实际的部署环境。我想将其包含在多个管道中(例如 azure-pipeline.yml
此处)以避免代码重复。
我在我的主要管道 YAML 文件中想象如下内容:
# azure-pipeline.yml
includes:
- template: deployment-environment.yml
使用以下 YAML 模板:
# deployment-environment.yml
parameters:
- name: deploymentEnvironmentSetting
type: string
default: auto
values:
- auto
- none
- dev
- test
- prod
variables:
- name: deploymentEnvironment
${{ if ne(parameters.deploymentEnvironmentSetting, 'auto') }}:
value: ${{ parameters.deploymentEnvironmentSetting }}
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'development') }}:
value: dev
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'test') }}:
value: test
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'main') }}:
value: prod
${{ else }}:
value: none
这样用户就可以使用 Azure DevOps GUI 手动覆盖部署环境,如 this image 所示。
非常感谢您的帮助!
我测试了一下,似乎 'just' 插入模板和使用关键字 'extends' 都不需要传播其参数 到顶级 yaml 文件,因此 UI 不显示用于选择其中之一的框。
不幸的是,我认为目前实现它的唯一方法是通过添加具有允许值的关键字来复制 'parameters' 在 azure-pipeline.yml 之上,然后将提供的值传递给 deployment-environment.yml.
管道架构中没有 includes
关键字。该文档概述了您可以插入 模板 以供 Stage, Job or Step 重用。
stages:
- template: stages.yml
jobs:
- template: deployment-job.yml
steps:
- template: download-pipeline-artifact-steps.yml
有助于理解azure-pipeline yaml有一个schema并且定义了template
关键字:
还有一个 extends keyword that allows you to describe the pipeline in one file and pass in arguments. The documentation 列出了执行上述操作的示例。
# File: start.yml
parameters:
- name: environmentName
type: string
default: auto
variables:
- ${{ if ne(parameters.environmentName, 'auto'):
- name: environmentName
value: ${{ parameters.environmentName }}
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'development') }}:
- name: environmentName
value: dev
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'test') }}:
- name: environmentName
value: test
${{ elseif eq(variables['Build.BuildSourceBranchName'], 'main') }}:
- name: environmentName
value: prod
${{ else }}:
- name: environmentName
value: none
stages:
- stage: build
pool:
vmImage: windows-latest
jobs:
- job: ci
steps:
- script: deploy to $(environmentName)
# pipeline.yml
trigger:
- main
parameters:
- name: deploymentEnvironmentSetting
type: string
default: auto
values:
- auto
- none
- dev
- test
- prod
extends:
template: start.yml
parameters:
environment: ${{ parameters.deploymentEnvironmentSetting }}