如何将重复的Azure DevOps步骤拆分为可重用模板
我有下面的Azure DevOps模板,它当前被硬编码到一些特定的文件中。我希望使用循环将它重构成一个更简单的模板,这样我就不需要复制(和硬编码)特定的文件 [为简洁起见的pseduo代码]如何将重复的Azure DevOps步骤拆分为可重用模板,azure,azure-devops,Azure,Azure Devops,我有下面的Azure DevOps模板,它当前被硬编码到一些特定的文件中。我希望使用循环将它重构成一个更简单的模板,这样我就不需要复制(和硬编码)特定的文件 [为简洁起见的pseduo代码] #tests.yml steps: # pre-test steps. This is done once. - script: install tool1 - script: install tool2 - script: setup path stuff. # Tests
#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.
所以请注意我在每个项目中是如何做到这一点的
- 测试项目
- 显示codecoverage结果以进行控制台输出(因此我可以在此处查看结果)
- 将结果上传至第三方网站(供其他人查看)
steps:
# pre tests.
...
# tests
foreach project in projects
- script: test project |
display code coverage report
- script: upload report
# post-test
...
这可以在Azure DevOps中完成吗
-
-
extends:
template: template.yml
parameters:
buildArgs:
Arg1 : $(arg1-value)
Arg2 : $(arg2-value)
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 }}
template.yml
extends:
template: template.yml
parameters:
buildArgs:
Arg1 : $(arg1-value)
Arg2 : $(arg2-value)
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 }}
对于您的场景,只需在template.yml中放置
运行测试
/显示
/上传
步骤。使用每个
以及参数
来扩展模板,这样您就可以实现循环。感谢Merlin给出的精彩答案!非常感谢。不幸的是,我一直无法让它工作。我希望传入一个参数和一个值。不是键/值。例如,buildArgs
:project1、project2、project3`。我还没能得到那一点,工作。@Pure.Krome可以给我一个样本数据吗?所需的参数数据结构?如果可以的话,把它更新成你的问题:-)我已经在开场白中这样做了?(我还没有编辑它。)。请参见第二个代码块示例。它需要传入一系列项目名称(字符串)。。。然后我对每个项目执行foreach
并按2个步骤运行,在那里(也可能是一个模板!)@Pure.Krome,您只需提供有关步骤的示例。但最重要的内容是配置正确的参数,使extends与每个
一起工作。所以,我想要的是你可以和我分享一个示例参数结构。然后,我可以为您提供帮助,使每个都能正常工作。