将步骤作为参数传递

问题描述 投票:0回答:1

我的

pipleine.yaml
延伸了另一个
template.yaml
。模板中有一个参数
prePlanSteps
可以让我向母版添加步骤。

我的测试脚本很简单:

echo region = ${{ env.region }}

如果我直接将其作为内联步骤放置,则此方法有效。但是,如果我尝试将相同的代码传递给

prePlanSteps
参数,则会失败:

Unrecognized value: 'env'.

我显然必须以特定的格式/语法传递它,以使其在正确的时间/地点解析,但我不知道如何实现。

template.yaml

parameters:
- name: envList
  type: object
- name: prePlanSteps
  type: stepList
  default: []

  - ${{ each env in parameters.envList }}:
    - stage: "${{ env.name }}Build"
      variables:
      jobs:
      - job: 'Plan'
        steps:
          - bash: |
              echo region = ${{ env.region }}

          - ${{ parameters.prePlanSteps }}

pipeline.yaml

 extends:
  template: template.yml
  parameters:
    envList:
      - name: dev
        region: myRegion
    prePlanSteps:
      - bash: |
          echo region = ${{ env.region }}
        displayName: preplansteps_test
        name: preplansteps_test
azure-devops azure-pipelines-yaml
1个回答
0
投票

看起来它正在尝试在扩展之前的编译过程中找到您的变量

pipeline.yaml
。您可以切换到变量并将它们传递给模板:

模板

parameters:
- name: envList
  type: object
- name: prePlanSteps
  type: stepList
  default: []

stages:
  - ${{ each env in parameters.envList }}:
    - stage: "${{ env.name }}Build"
      variables:
      - name: my.env
        value: ${{ env.name }}
      - name: my.region
        value: ${{ env.region }}
      jobs:
      - job: 'Plan'
        steps:
        - bash: |
            echo region = ${{ env.region }}
        - ${{parameters.prePlanSteps}}

管道

extends:
  template: template.yml
  parameters:
    envList:
    - name: dev
      region: devreg
    - name: test
      region: testreg
    prePlanSteps:
      - bash: |
          echo extented region = $(my.region)
          echo extented env = $(my.env)
        displayName: preplansteps_test
        name: preplansteps_test
© www.soinside.com 2019 - 2024. All rights reserved.