Azure devops 是否可以将包含作业列表的模板传递给作业列表类型参数?

Azure devops 是否可以将包含作业列表的模板传递给作业列表类型参数?,azure-devops,azure-pipelines,azure-pipelines-yaml,Azure Devops,Azure Pipelines,Azure Pipelines Yaml,目前在Azure管道中,我们可以将要执行的作业列表传递给子模板,其参数为jobListtype,如doco中所示 是否有一种方法可以将pipeline.yml中的这些作业封装到另一个作业模板中的作业列表参数,并将该模板传递到作业列表参数。我尝试按照以下方式构建我的管道: pipeline.yml deployment-template.yml post-deploy-tests-dev.yml post-deploy-smoke-tests-prod.yml 我希望根据环境的不同,在部署模板

目前在Azure管道中,我们可以将要执行的作业列表传递给子模板,其参数为
jobList
type,如doco中所示

是否有一种方法可以将pipeline.yml中的这些作业封装到另一个作业模板中的
作业列表
参数,并将该模板传递到
作业列表
参数。我尝试按照以下方式构建我的管道:

pipeline.yml
deployment-template.yml
post-deploy-tests-dev.yml
post-deploy-smoke-tests-prod.yml
我希望根据环境的不同,在部署模板的末尾动态插入不同测试的作业。我尝试了
deployment template.yml
中的
jobList
类型参数,如下所示,但它抛出了一个错误,即
映射不应为

#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 }}
是否有一种方法可以动态传递
作业列表

它抛出一个错误,表示映射不是预期的

使用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
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
jobs:
    - job: Test1
      steps:
      - script: echo test1
部署模板.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
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
jobs:
    - job: Test1
      steps:
      - script: echo test1
部署后测试-dev.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
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
jobs:
    - job: Test1
      steps:
      - script: echo test1
部署后烟雾测试-prod.yml

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

它抛出一个错误,表示映射不是预期的

使用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
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
jobs:
    - job: Test1
      steps:
      - script: echo test1
部署模板.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
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
jobs:
    - job: Test1
      steps:
      - script: echo test1
部署后测试-dev.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
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
jobs:
    - job: Test1
      steps:
      - script: echo test1
部署后烟雾测试-prod.yml

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


谢谢Kevin Lu MSFT。我使用了
模板
作为
作业
而不是
作业
。将
模板
引用更改为
-template
修复了格式错误。感谢Kevin Lu MSFT。我使用了
模板
作为
作业
而不是
作业
。将
模板
引用更改为
-template
修复了格式错误。