2

目前在 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

4

1 回答 1

0

它会抛出一个错误,说不需要映射。

使用 YAML 示例进行测试,导致此问题的原因:您在pipeline.yml文件(和)-中的模板字段之前缺少。在这个位置,模板相当于一个工作,你需要添加.- template: post-deploy-tests-dev.yml- template: post-deploy-smoke-tests-prod.yml-

这是我的样本:

管道.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

部署模板.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

部署后测试-dev.yml

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

部署后烟雾测试-prod.yml

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

结果:

在此处输入图像描述

于 2020-08-05T03:17:20.340 回答