提问人:szn 提问时间:11/10/2023 最后编辑:szn 更新时间:11/10/2023 访问量:41
ADO 是否可以基于字符串和不同的参数获取参数?
ADO Can I get a parameter based on a string and a different parameter?
问:
我有阶段作为参数,如下所示:
parameters:
- name: stages
type: object
default:
- stage: dev
dependsOn: build
- stage: test
dependsOn: dev
- name: execute_infra_tests_dev
displayName: Execute infra tests on DEV
type: boolean
default: false
- name: execute_infra_tests_test
displayName: Execute infra tests on TEST
type: boolean
default: false
我使用以下方法遍历各个阶段:
stages:
- stage: build
displayName: Build
jobs:
- job:
displayName: Build Job
...
- ${{ each stage in parameters.stages }} :
- stage: ${{ stage.stage }}
displayName: Deploy ${{ stage.stage }} Environment
dependsOn: ${{ stage.dependsOn }}
...
这很好用,没问题。 但我想做一个测试基础设施的阶段,上下文并不重要,但这应该是开发人员打开和关闭的开关。 在参数中有一个execute_infra_tests_XXX,其中 XXX 需要使用 ${{ stage.stage }} 填充。
我尝试了很多选择,但似乎没有一个有效。在我的脑海中,它应该是这样的:
- stage: ${{ stage.stage }}_infra_test
displayName: ${{ stage.stage }} Infra Test
dependsOn: ${{ stage.stage }}
condition: eq( ${{ parameters.execute_infra_tests_${{ stage.stage }} }}, true)
jobs:
- job:
这显然是行不通的,但相信我,我尝试了数百万种方法,但似乎无法弄清楚。
ChatGPT 附带了这个:
condition: eq(${{ parameters['execute_infra_tests_' + parameters.stage] }}, true)
这感觉是一个不错的选择,但也没有用。
我尝试了很多(绝望的)选择,比如:
condition: eq(${{ parameters.execute_infra_tests_${{ stage.stage }} }}, true)
我不记得我试过什么,很多......
答:
0赞
Krzysztof Madej
11/10/2023
#1
您唯一的选择是在此处使用索引语法
parameters:
- name: 'solution'
default: '**/*.sln'
type: string
steps:
- task: msbuild@1
inputs:
solution: ${{ parameters['solution'] }} # index syntax
- task: vstest@2
inputs:
solution: ${{ parameters.solution }} # property dereference syntax
在你的情况下,它会是(使用格式表达式):
condition: eq(${{ parameters[format('execute_infra_tests_{0}', parameters.stage)] }}, true)
评论