如何在ADO Pipelines循环阶段中动态引用对应布尔参数设置执行条件
如何在ADO Pipelines循环阶段中动态引用对应布尔参数设置执行条件
嘿,我完全懂你现在的困扰!这种在循环里动态匹配参数的场景,ADO Pipeline的表达式语法确实有点“反直觉”,不过你离正确答案只差一步——别用嵌套的表达式,改用参数索引器语法就能解决问题!
你之前尝试的${{ parameters.${{ step.step }} }}是行不通的,因为ADO不支持嵌套的模板表达式。但其实我们可以把参数当成一个对象,用方括号加字符串的方式来动态访问它的属性,而step.step正好就是我们要访问的参数名称字符串(比如"Step1"、"Step2")。
直接把你的条件改成下面这样就可以了:
condition: eq(parameters[step.step], true)
给你贴出完整的修正后代码,方便你参考:
parameters: - name: Step1 type: boolean default: true - name: Step2 type: boolean default: true - name: Step3 type: boolean default: false - name: Step4 type: boolean default: false - name: Steps type: object default: - step: Step1 dependsOn: Step0 - step: Step2 dependsOn: Step0 - step: Step3 dependsOn: Step0 - step: Step4 dependsOn: Step3 stages: - stage: Step0 jobs: - job: Job0 steps: - script: echo "Step0 running" - ${{ each step in parameters.Steps }}: - stage: Deploy${{ step.step }} displayName: Deploy ${{ step.step }} dependsOn: ${{ step.dependsOn }} condition: eq(parameters[step.step], true) jobs: - job: Deploy${{ step.step }}Job steps: - script: echo "Deploying ${{ step.step }}"
这样修改后,每个循环生成的阶段就会自动匹配对应的布尔参数:比如DeployStep1阶段会检查parameters.Step1是否为true,DeployStep3则检查parameters.Step3,完全符合你想要的“只运行参数为true的阶段”的需求。另外提一句,ADO里布尔值用小写true/false更规范哦,不过大写也能正常识别~
备注:内容来源于stack exchange,提问作者Andrew Haigh
相关产品推荐
相关产品推荐

