Дополнительные шаблоны заданий в конвейерах YAML - PullRequest
1 голос
/ 06 октября 2019

Можно ли дополнительно включать шаблоны на основе какого-либо выражения шаблона? В частности, я хочу, чтобы мое определение верхнего уровня в azure-pipelines.yml вызывало, какие шаблоны заданий сборки использовать во включенном шаблоне этапа:

azure-pipelines.yml:

stages:
- template: generic-build-stage.yml  # Template reference
  parameters:
    # Example of optional build templates to use
    buildTypes: [SpecificBuildJobs1, SpecificBuildJobs3, SpecificBuildJobs4]

generic-build-stage.yml:

parameters:
  buildTypes: ???

stages:
- stage: generic_build
  jobs:
  ${{ }} # ???? What goes here to include the appropriate templates
  - template: ???

Вышеприведенное выражение шаблона в идеале должно быть расширено до следующего:

  jobs:
  - template: specific-build-jobs1.yml
  - template: specific-build-jobs3.yml
  - template: specific-build-jobs4.yml

Редактировать: пример «Итеративная вставка» в Документы , по-видимому, предполагают, что возможна некоторая форма динамической вставки во время анализа.

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

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

azure-pipelines.yml:

stages:
- template: generic-build-stage.yml  # Template reference
  parameters:
    # Example of optional build templates to use
    buildTypes: [SpecificBuildJobs1, SpecificBuildJobs3, SpecificBuildJobs4]

generic-build-stage.yml:

parameters:
  buildTypes: [MissingBuildType] # Use this if buildTypes is not provided

stages:
  - stage: build_stage
    jobs:
    # Note: VS Code extension for Pipelines (1.1574.4) will
    # say this is an "Unexpected property", but this works in ADO

    - ${{ if containsValue(parameters.buildTypes, 'MissingBuildType') }}:
      - template: build-stage-null.yml
    - ${{ if containsValue(parameters.buildTypes, 'SpecificBuildJobs1') }}:
      - template: specific-build-jobs1.yml
    - ${{ if containsValue(parameters.buildTypes, 'SpecificBuildJobs2') }}:
      - template: specific-build-jobs2.yml
    - ${{ if containsValue(parameters.buildTypes, 'SpecificBuildJobs3') }}:
      - template: specific-build-jobs3.yml
    - ${{ if containsValue(parameters.buildTypes, 'SpecificBuildJobs4') }}:
      - template: specific-build-jobs4.yml
0 голосов
/ 07 октября 2019

Это кажется невозможным, поскольку ссылка на шаблон разрешается во время разбора.

Возможно, вам придется установить несколько шаблонов для основного конвейера и установить значение для buildTypes в качестве конкретного имени шаблона для шаблонов работ, а в generic-build-stage.yml используйте - template:${{parameters.buildTypes}}.yml для вызова соответствующего шаблона задания;

Azure-pipelines.yml:

stages:
- template: generic-build-stage.yml 
  parameters:
      buildTypes:specific-build-jobs1  

- template: generic-build-stage.yml 
  parameters:
      buildTypes:specific-build-jobs3  

generic-build-stage.yml

parameters:
  buildTypes: ""

stages:
- stage: generic_build
  jobs:
  - template: ${{parameters.buildTypes}}.yml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...