【问题标题】:How to pass a list as build parameter to a YAML template in Azure DevOps Server 2019 (on-prem)?如何将列表作为构建参数传递给 Azure DevOps Server 2019(本地)中的 YAML 模板?
【发布时间】:2020-07-14 03:30:27
【问题描述】:

例如,考虑以下模板(例如名为 xyz.yml):

parameters:
  projects: ['p1', 'p2', 'p3']

steps:
- ${{ each project in parameters.projects }}:
  - task: VSBuild@1
    displayName: Build ${{ project }}
    inputs:
      solution: ${{ project }}.sln
      ...

现在,假设我有以下 azure-pipelines.yml 文件:

...
steps:
  ...
  - template: xyz.yml
    parameters:
      projects: ???
...

如何从构建变量中提供projects 模板参数?假设在构建时我只想请求构建 p1p3。我该怎么做?

【问题讨论】:

    标签: azure-devops yaml


    【解决方案1】:

    您可以尝试使用 stepList 类型参数并将相同的参数值传递给模板。

    例如:

    main.yaml:

    parameters:
      - name: mySteplist
        type: stepList
        default:
        - task: CmdLine@2
          inputs:
            script: |
              echo Write your commands here
              
              echo Hello world1
        - task: CmdLine@2
          inputs:
            script: |
              echo Write your commands here
              
              echo Hello world2
    
    trigger:
      - none
    
    steps:
      - template: stepstem.yml
        parameters: 
          buildSteps:
          - ${{ parameters.mySteplist }}
        
      # - template: stepstem.yml
      #   parameters:
      #     buildSteps:  
      #     - bash: echo Test #Passes
      #       displayName: succeed
      #     - bash: echo "Test"
      #       displayName: succeed
      # - ${{ parameters.mySteplist }}
      - task: CmdLine@2
        inputs:
          script: |
            echo Write your commands here
            
            echo Hello world3
    

    stepstem.yaml:

    parameters:
    - name: buildSteps # the name of the parameter is buildSteps
      type: stepList # data type is StepList
      default: []
    
    steps:
      - ${{ parameters.buildSteps }}
      - task: CmdLine@2
        inputs:
          script: |
            echo Write your commands here
            
            echo Hello world tem
      - script: echo "hello"
    

    因此,您可以使用 VSBuild@1 任务作为默认参数值,并且可以在队列构建时更改它。

    【讨论】:

    • 这在 Azure DevOps Server 2019 中不起作用。2020 RC1 已经发布,所以一旦我们迁移到它,我也许可以使用它。但就目前而言,这无关紧要。
    • @mark 恐怕你必须在 DevOps server 2020 中进行。
    • 这也是我的观点。
    • 但我仍然看不到您的建议如何帮助从构建参数传播列表
    • @mark 对于示例代码,它使用 stepList 作为构建参数并将其传递给模板。没有字符串列表类型。如果我误解了你,请随时告诉我。
    【解决方案2】:

    检查以下示例:

    #xyz.yml
    
    parameters:
      projects: []
    
    steps:
    - ${{ each project in parameters.projects }}:
      - task: VSBuild@1
        displayName: Build ${{ project }}
        inputs:
          solution: ${{ project }}.sln
          ...
          ...
    
    #azure-pipelines.yml
    
     steps:
     - template: xyz.yml
       parameters:
         projects: ["p1", "p3"]
    

    【讨论】:

    • 你在哪里展示了如何从构建变量传递列表?
    • 不支持将数组定义为变量,变量语法为variables: { string: string }。目前只能使用参数定义数组:developercommunity.visualstudio.com/content/problem/812728/…
    • 那么这应该是真正的答案 - 将列表从构建传递到 YAML 是不可能的。这是一个大问题。 Azure DevOps 可以具有 split 函数,就像它具有 join 函数一样。这样一个字符串可以被转换为列表。这是一个真正的无赖。
    • the case 的产品团队提到“我们正准备在不久的将来发布一个功能,让您可以通过更复杂的结构。敬请期待!”。此外,您可以在网站developercommunity.visualstudio.com/content/idea/… 提交新建议。
    • 我们正在使用本地 AzD。新功能慢慢地传播给我们 veeeeeeeeeeeery :-(
    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2019-11-16
    • 2019-06-29
    • 1970-01-01
    相关资源
    最近更新 更多