Azure параметр stageList конвейера для расширения шаблона - PullRequest
1 голос
/ 30 мая 2020

Я пытаюсь передать список этапов из конвейера 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  

Цель состоит в том, чтобы взять список этапов и проверить если пользователи выполняют только шаги, одобренные отделом соблюдения нормативных требований компании.

Я получаю сообщение об ошибке [enter image description here] [1

не знаю, почему появляется ошибка «задача», ключевые слова задачи отсутствуют используется где угодно. Любая помощь?

1 Ответ

1 голос
/ 01 июня 2020

Основываясь на моем тесте, кажется, что 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.

Вот пример steplist , вы могли бы сослаться на него.

Надеюсь на это помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...