【问题标题】:Optional job templates in YAML PipelinesYAML 管道中的可选作业模板
【发布时间】:2019-10-06 20:06:30
【问题描述】:

是否可以根据某种模板表达式选择性地包含模板?具体来说,我希望我在 azure-pipelines.yml 中的顶级定义调用在包含的阶段模板中使用哪些构建作业模板:

天蓝色管道.yml:

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

通用构建阶段.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

编辑:docs 中的“迭代插入”示例似乎表明某种形式的动态、解析时插入是可能的。

【问题讨论】:

    标签: azure-devops


    【解决方案1】:

    这似乎是不可能的,因为模板引用是在解析时解析的。

    您可能需要为主管道设置多个模板,并将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
    

    【讨论】:

    • 是的,这可能是不可能的,尽管执行此操作所需的所有信息在解析时都可用。谢谢Levi Lu。
    【解决方案2】:

    以下方法允许顶级管道定义在较低级别使用可变数量的作业集。

    天蓝色管道.yml:

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

    通用构建阶段.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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-20
      • 2020-06-12
      • 2020-09-15
      • 2019-09-07
      • 2020-06-22
      • 1970-01-01
      • 2021-08-29
      • 2020-05-28
      相关资源
      最近更新 更多