Можно ли передать шаблон со списком вакансий в параметр типа jobList? - PullRequest
0 голосов
/ 05 августа 2020

В настоящее время в конвейерах Azure мы можем передать список задач, которые должны быть выполнены, в дочерний шаблон с параметром типа jobList, как показано в документе.

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#iterative -insertion

Есть ли способ инкапсулировать эти задания из pipeline.yml, которые передаются в параметр jobList внутри другого шаблона задания, и передать этот шаблон в параметр jobList. Я попытался структурировать свой конвейер следующим образом:

pipeline.yml
deployment-template.yml
post-deploy-tests-dev.yml
post-deploy-smoke-tests-prod.yml

Я хотел бы динамически вставлять различные задания тестов в конец deployment template в зависимости от среды. Я попробовал параметр типа jobList в deployment-template.yml, как показано ниже, но он выдает ошибку: mapping not expected.

#post-deploy-tests-dev.yml
jobs:
    - job: Test1
      steps:
      - script: execute test1

#post-deploy-tests-smoke-tests-prod.yml
jobs:
    - job: Test2
      steps:
      - script: execute test2

#pipeline.yml
...
- template: deployment-template.yml
  parameters:
    environment: dev
    testsJobsList: 
      template: post-deploy-tests-dev.yml
- template: deployment-template.yml
  parameters:
    environment: prod
    testsJobsList: 
      template: post-deploy-smoke-tests-prod.yml

#deployment-template.yml
parameters:
  - name: testsJobsList
    type: jobList
    default: []
#All deployment jobs here
jobs:
...
...
#Tests as the end
  - ${{ parameters.testsJobsList }}

Есть ли способ динамически передать jobList?

1 Ответ

0 голосов
/ 05 августа 2020

выдает ошибку, говоря, что сопоставление не ожидается.

Тест с образцом YAML, причина этой проблемы: вам не хватает - перед полем шаблона в Файл pipeline.yml (- template: post-deploy-tests-dev.yml и - template: post-deploy-smoke-tests-prod.yml). В этой позиции шаблон эквивалентен заданию, и вам нужно добавить -.

Вот мой пример:

pipeline.yml

trigger:
- none

pool:
  vmImage: 'windows-latest'

jobs:
- template: deployment-template.yml
  parameters:
    testsJobsList: 
      - template: post-deploy-tests-dev.yml

- template: deployment-template.yml
  parameters:
    testsJobsList: 
      - template: post-deploy-smoke-tests-prod.yml

deployment-template.yml

parameters:
- name: 'testsJobsList'
  type: jobList
  default: []

jobs:
- ${{ each job in parameters.testsJobsList }}: # Each job
  - ${{ each pair in job }}:          # Insert all properties other than "steps"
      ${{ if ne(pair.key, 'steps') }}:
        ${{ pair.key }}: ${{ pair.value }}
    steps:                            # Wrap the steps
    - ${{ job.steps }}                # Users steps

post-deploy-tests-dev.yml

jobs:
    - job: Test1
      steps:
      - script: echo test1

сообщение -deploy-smoke-tests-prod.yml

jobs:
    - job: Test2
      steps:
      - script: echo test2

Результат:

введите описание изображения здесь

...