Azure Pipelines:如何将相关复选框组设为参数并以数组传递?
Azure Pipelines复选框分组并传数组到子模板的实现方法
先调整参数命名(建议这么做,避免空格坑)
把原来带空格的参数名改成统一格式,后续逻辑处理更顺畅:
parameters: - name: PackageOne type: boolean default: false - name: PackageTwo type: boolean default: false - name: PackageThree type: boolean default: false - name: PackageFour type: boolean default: false
方法一:用变量构建选中项数组
在主模板里先定义变量,逐个判断复选框是否勾选,把选中的包名攒成数组:
variables: selectedPackages: [] # 勾选一个就往数组里加一个 ${{ if eq(parameters.PackageOne, true) }}: selectedPackages: ${{ concat(variables.selectedPackages, ['PackageOne']) }} ${{ if eq(parameters.PackageTwo, true) }}: selectedPackages: ${{ concat(variables.selectedPackages, ['PackageTwo']) }} ${{ if eq(parameters.PackageThree, true) }}: selectedPackages: ${{ concat(variables.selectedPackages, ['PackageThree']) }} ${{ if eq(parameters.PackageFour, true) }}: selectedPackages: ${{ concat(variables.selectedPackages, ['PackageFour']) }}
然后直接把这个数组传给子模板:
- template: 'Templates/yetanothertemplate.yml' parameters: parm1: ${{ variables.selectedPackages }}
方法二:直接在模板调用时拼接数组
不想单独定义变量的话,也可以直接在调用子模板的地方用条件表达式拼数组,一步到位:
- template: 'Templates/yetanothertemplate.yml' parameters: parm1: >- ${{ concat( parameters.PackageOne ? ['PackageOne'] : [], parameters.PackageTwo ? ['PackageTwo'] : [], parameters.PackageThree ? ['PackageThree'] : [], parameters.PackageFour ? ['PackageFour'] : [] ) }}
子模板怎么接这个数组
子模板yetanothertemplate.yml里要先定义对应的参数,之后就能遍历数组做操作了:
parameters: - name: parm1 type: array default: [] steps: - ${{ each package in parameters.parm1 }}: - script: echo 正在处理包 ${{ package }}
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

