Azure pipeline stageList参数扩展模板。

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

我试图从 azure pipeline 传递阶段列表,如下图所示。

# File: azure-pipelines.yml
trigger:
- master

extends:
  template: start_stage.yml
  parameters:
    cdstages:  
    - stage: secure_buildstage
      pool: Hosted VS2017
      jobs:
      - job: secure_buildjob
        steps:
        - bash: echo This happens before code 
          displayName: 'Base: Pre-build'
        - bash: echo Building
          displayName: 'Base: Build'

        - bash: echo This happens after code
          displayName: 'Base: Signing'

    - stage: secure_deploystage
      pool: Hosted VS2017
      jobs:
      - job: secure_deployjob
        steps:
        - bash: echo This happens before code 
          displayName: 'Base: Pre-build'
        - bash: echo Building
          displayName: 'Base: Build'

        - script: echo This happens after code
          displayName: 'Base: Signing'

扩展模板如下图所示

parameters:
- name: cdstages # the name of the parameter is buildSteps
  type: stageList # data type is StepList
  default: [] # default value of buildSteps
stages:
- ${{ each stage in parameters.cdstages }}:
  - ${{ each job in stage.jobs }}:
    - ${{ each step in job.steps }}:
      - ${{ each pair in step }}:
          ${{ if ne(pair.value, 'CmdLine@2') }}:
            ${{ pair.key }}: ${{ pair.value }}       
          ${{ if eq(pair.value, 'CmdLine@2') }}: 
            '${{ pair.value }}': error  

目标是采取阶段列表,并验证用户是否只运行公司合规团队批准的步骤。

我收到错误[enter image description here][1

不知道为什么会出现 "task "错误,任何地方都没有使用任务关键字。

azure-devops azure-pipelines azure-pipelines-release-pipeline azure-pipelines-yaml
1个回答
1
投票

根据我的测试,它似乎在stagelist在 start_stage.yml 不支持添加 each指令来获取更深层次的内容(如工作和步骤)。

当你使用stagelist时,它可以得到阶段,并使用它进行比较。

比如说

parameters:
- name: cdstages # the name of the parameter is buildSteps
  type: stageList # data type is StepList
  default: [] # default value of buildSteps

stages:
- ${{ each stage in parameters.cdstages }}:
  - ${{ each pair in stage }}:
      ${{ if ne(pair.value, 'abc') }}:
        ${{ pair.key }}: ${{ pair.value }}       
      ${{ if eq(pair.value, 'abc') }}: 
        '${{ pair.value }}': error

这个Yaml模板可以工作。

但是当我添加了 each 台后的指令,以获得工作。工作是没有的。

parameters:
- name: cdstages 
  type: stageList 
  default: [] 

stages:
- ${{ each stage in parameters.cdstages }}:
  - ${{ each job in stage.jobs }}:
    - ${{ each pair in job }}:
        ${{ if ne(pair.value, 'abc') }}:
          ${{ pair.key }}: ${{ pair.value }}       
        ${{ if eq(pair.value, 'abc') }}: 
          '${{ pair.value }}': error

job issue

根据你的要求,你需要得到构建步骤,并使用它进行比较。

你可以尝试直接使用 steplist 类型。

下面是一个关于 阶梯名单,你可以参考一下。

希望能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.