如何在天蓝色管道中使用模板作为参数

时间:2020-07-03 03:15:05

标签: azure-pipelines azure-pipelines-yaml

我正在使用扩展模板,并且我想在此仅使用另一个模板作为参数。 但是我无法,而且我不确定语法是否错误。 得到这个错误: /templatetest.yml(第8行,第1行):意外值'template'

#This is in parameter file in separate repo .policyparams.yml 
parameters:
- name: runPerfTests
  type: boolean
  default: false

resources:
  repositories:
  - repository: MSLearnDocker
    type: git
    name: AzureCoreApp/MSLearnDocker
    ref: refs/heads/master

template: policyparams.yml@MSLearnDocker

stages:
- stage: Build
  displayName: Build
  jobs:
  - job: Build
    steps:
    - script: echo running Build


- stage: UnitTest
  displayName: Unit Test
  dependsOn: Build
  jobs:
  - job: UnitTest
    steps:
    - script: echo running UnitTest


- ${{ if eq(parameters.runPerfTests, true) }}:
  - stage: PerfTest
    displayName: Performance Test
    dependsOn: Build
    jobs:
    - job: PerfTest
      steps:
      - script: echo running PerfTest


- stage: Deploy
  displayName: Deploy
  dependsOn: UnitTest
  jobs:
  - job: Deploy
    steps:
    - script: echo running UnitTest

如何在扩展模板中获取参数模板文件?

2 个答案:

答案 0 :(得分:0)

This是您要寻找的东西,这些文档介绍了从模板扩展时如何使用参数。

简而言之,这意味着您可以在模板yaml文件中定义所有步骤,并传递扩展yaml文件中的参数值。请记住,您也可以将构建步骤作为参数传递,有关示例,请参见here

有关您的案例的一些摘要,请参见下文。

名为TemplateRepo的存储库中的

pipeline-template.yml

parameters:
- name: runPerfTests
  type: boolean
  default: false

steps:
- script: echo Current parameter value ${{ parameters.runPerfTests }}.
名为ExtendRepo的存储库中的

azure-pipelines.yml

# File: azure-pipelines.yml
trigger:
- master

resources:
  repositories:
  - repository: TemplateRepo
    type: git
    name: Test/TemplateRepo
    ref: refs/heads/master

extends:
  template: pipeline-template.yml@TemplateRepo
  parameters:
    runPerfTests: true

答案 1 :(得分:0)

但是我不能,而且我不确定语法是否错误。得到 此错误:/templatetest.yml(行:8,列:1):意外值 '模板'

语法错误。它不支持仅在主模板中为参数使用另一个模板。因此,您不能使用以下格式:

resources:
  repositories:
  - repository: MSLearnDocker
    type: git
    name: AzureCoreApp/MSLearnDocker
    ref: refs/heads/master

template: policyparams.yml@MSLearnDocker
Or:
- template: policyparams.yml@MSLearnDocker

不支持它们,它将引发预期的语法错误:Unexpected value 'template'

详细信息:

参数具有相应的工作范围,仅在定义它的.yml文件中有效。因此您的主模板文件将无法访问policyparams.yml文件中的参数。

我的步骤:

Main.yml:

parameters:
- name: appFullName
  type: string
  default: Lance

steps:
- script: echo ${{ parameters.appFullName }}
- template: getConfig.yml
- script: echo ${{ parameters.TestIfOk }}

然后:

getConfig.yml

parameters:
- name: Test
  type: string
  default: TestIfOk

steps:
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      Write-Host "Hello World"

结果:

enter image description here