Azure devops Azure pipeline stageList参数用于扩展模板

Azure devops Azure pipeline stageList参数用于扩展模板,azure-devops,azure-pipelines,azure-pipelines-release-pipeline,azure-pipelines-yaml,Azure Devops,Azure Pipelines,Azure Pipelines Release Pipeline,Azure Pipelines Yaml,我正试图通过下面显示的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

我正试图通过下面显示的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  
要扩展如下所示的模板

# 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

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

根据我的测试,似乎
start\u stage.yml
中的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模板可以工作

但是当我在后台添加
每个
指令来获取作业时,作业不可用

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

根据您的需求,您需要获得构建步骤并将其用于比较

您可以尝试直接使用
步骤列表
类型

这里有一个关于的例子,你可以参考一下


希望这能有所帮助。

Hi@Sanjeev,这个问题有什么更新吗?请随时告诉我答案是否能提供帮助。只是提醒一下。根据此docs.microsoft.com/en us/azure/devops/pipelines/security/…可以传递作业数组,然后我们可以访问扩展模板中的作业和步骤,然后我们应该能够访问stage->job->steplist我们计划为开发团队设置多级yaml管道,在每个作业中传递steplist会改变他们的体验。我们必须分析他们正在运行的内容,所以我们考虑在代理池级别使用扩展模板检查,有没有其他方法来查看用户在排队后试图运行的内容根据这一点,可以传递一个作业数组,然后我们可以访问扩展模板中的作业和步骤,然后我们应该能够访问stage->job->steplist