如何将此重复的 Azure DevOps 步骤拆分为可重用模板

Pur*_*ome 3 azure azure-devops

我有以下 Azure DevOps 模板,当前已硬编码到某些特定文件。我希望使用循环将其重构为更简单的模板,这样我就不需要复制(和硬编码)特定文件。

[为了简洁起见,伪代码]

#tests.yml

steps:

  # pre-test steps. This is done once.

  - script: install tool1
  - script: install tool2
  - script: setup path stuff.

  # Tests
  - script: test project1 |
            display codecoverage to console-out
  - script: test project 2 |
            display codecoverage to console-out

  # Post-tests
  - script: upload coverage report for project1
  - script: upload coverage report for project2
  - task: PublishTestResults@2 # publish test results to Azure DevOps.
Run Code Online (Sandbox Code Playgroud)

所以请注意我是如何在每个项目中做到这一点的

  • 测试项目
  • 将代码覆盖结果显示到控制台输出(这样我可以在这里看到结果)
  • 将结果上传到第三方网站(供其他人也查看)

我希望有一种方法可以让我将信息传递到模板中,然后循环遍历输入数据数组。

像这样..

steps:

  # pre tests.
  ...

  # tests
  foreach project in projects
    - script: test project |
              display code coverage report
    - script: upload report

  # post-test
  ...
Run Code Online (Sandbox Code Playgroud)

这可以在 Azure DevOps 中完成吗?

    -

Mer*_*SFT 5

就个人而言,也许这些关键词each就是您正在寻找的?

对于样品:

azure-pipelines.yml

extends:
  template: template.yml
  parameters:
    buildArgs:  
      Arg1 : $(arg1-value)
      Arg2 : $(arg2-value)
Run Code Online (Sandbox Code Playgroud)

模板.yml

parameters:
- name: buildArgs 
  type: object
  default: [] 
stages:
  - stage: EachLoop
    displayName: Run Each extends
    jobs:
    - job: looping
      steps:
      - ${{ each arg in parameters.buildArgs }}:
        - bash: |
            echo ${{ arg.key }}
            echo ${{ arg.value }}
            echo "##vso[task.setvariable variable=buildOther]${{ arg.value }}"
          displayName: ${{ arg.key }}
        - bash: |
            echo "buildstring=$(buildOther)"
          displayName: ECHO-${{ arg.key }}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


对于您的场景,只需将run test//display步骤放入uploadtemplate.yml 中。使用eachwithparameters来扩展模板,这样就可以实现循环。