ADO 是否可以基于字符串和不同的参数获取参数?

ADO Can I get a parameter based on a string and a different parameter?

提问人:szn 提问时间:11/10/2023 最后编辑:szn 更新时间:11/10/2023 访问量:41

问:

我有阶段作为参数,如下所示:

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)

我不记得我试过什么,很多......

azure-devops 参数 yaml

评论


答:

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)