我有一个嵌套的Azure DevOps YAML管道:
---
name: Some Release Pipeline
trigger: none
variables:
- group: "DEV VARIABLE GROUP" # This is the environment variable library
stages:
- stage: Stage1
displayName: "Stage 1"
dependsOn: []
jobs:
- template: /pipelines/pipeline_templates/sometemplate.yml
我想做的是在任何环境中重用此发布管道。理想情况下,我将设置管道变量“ group-name”,然后将其分配给该组。像这样:
---
name: Some Release Pipeline
trigger: none
variables:
- group: "$(group-name)" # This is the environment variable library
stages:
- stage: Stage1
displayName: "Stage 1"
dependsOn: []
jobs:
- template: /pipelines/pipeline_templates/sometemplate.yml
但是,这似乎不起作用。拼命地,我尝试了多种方法:
${{ group-name }}
jobs:
- template: /pipelines/pipeline_templates/sometemplate.yml
parameters:
variablegroup: $(group-name)
,然后在作业中的sometemplate.yml中进行设置。例如:
jobs:
- job: Job1
variables:
- group: ${{ parameters.variablegroup }}
但是,这也不起作用。
我想知道是否有人找到了解决方案(然后进行调用DevOps REST API的杂乱工作)?
答案 0 :(得分:0)
您是否尝试注入变量mapping as a parameter。
参数不限于标量字符串。只要参数扩展的地方希望有映射,该参数就可以是映射。同样,可以在需要序列的地方传递序列。
# sometemplate.yml
parameters:
variables: {}
jobs:
- job: build
variables: ${{ parameters.variables }}
# somepipeline.yml
name: Some Release Pipeline
trigger: none
stages:
- stage: Stage1
displayName: "Stage 1"
dependsOn: []
jobs:
- template: sometemplate.yml
parameters:
variables:
group: "DEV VARIABLE GROUP"
我已经使用参数将任务集注入到模板中其他任务之前/之后的动作中,但是我没有使用它来注入映射。我认为该特定实现会变得棘手的领域在the need to use name/value
syntax中。我想如果您要将组映射传递到作业中,则定义变量的任何其他操作都需要使用扩展语法。
如果同时使用变量和变量组,则必须对各个(未分组的)变量使用名称/值语法:
此外,在使用运行时$()
与“编译”或扩展时间${{ }}
语法时,可能还需要小心。使用变量时,您可能希望尽可能使用扩展时间参考。
答案 1 :(得分:0)
您将组名作为参数传递给模板的直觉是正确的。我能够使它正常工作:
模板文件passing-variable-groups.yml
parameters:
- name: deploymentVariableLibraries
type: object
default:
dev: ''
qa: ''
prod: ''
jobs:
- job: TestDev
variables:
- group: ${{parameters.deploymentVariableLibraries.dev}}
steps:
- script: echo "$(whichEnvironment)"
- job: TestQa
variables:
- group: ${{parameters.deploymentVariableLibraries.qa}}
steps:
- script: echo "$(whichEnvironment)"
- job: TestProd
variables:
- group: ${{parameters.deploymentVariableLibraries.prod}}
steps:
- script: echo "$(whichEnvironment)"
管道
trigger: none
resources:
repositories:
- repository: templates
type: git
name: c4ePipelineExamples-Templates
jobs:
- template: passing-variable-groups.yml@templates
parameters:
deploymentVariableLibraries:
dev: 'test-dev'
qa: 'test-qa'
prod: 'test-prod'
每个作业的输出分别是DEV,QA和PROD(每个测试变量库中whichEnvironment的值)。
答案 2 :(得分:0)
以下对我有用,没有任何模板
variables:
- group: variables-${{variables['Build.SourceBranchName']}}