1

我正在尝试从如下所示的 azure 管道传递阶段列表

# 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  

目标是获取阶段列表并验证用户是否仅执行公司合规团队批准的步骤。

我收到错误 [ 在此处输入图像描述][1

不知道为什么会出现“任务”错误,在任何地方都没有使用任务关键字。有什么帮助吗?

4

1 回答 1

1

根据我的测试,stageliststart_stage.yml似乎不支持添加each指令以获取更深入的内容(例如作业和步骤)。

当你使用 stagelist 时,它可以获取 stage 并使用它进行比较。

例如:

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

工作问题

根据您的要求,您需要获取构建步骤并使用它进行比较。

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

这是一个关于steplist的示例,您可以参考它。

希望这可以帮助。

于 2020-06-01T05:50:50.640 回答