Azure DevOps 管道:第二个参数取决于第一个参数。

7
在Azure DevOps中,用户选择的第一个参数是否可以确定第二个参数(类型、显示名称等)?
例如:
parameters:
- name: parametr1
  displayName: example1
  type: string
  default: first
  values:
  - first
  - second
  - third

如果用户在启动管道时选择了 "first",则输入第二个参数:

- name: parametr2.1
  displayName: example2
  type: number

但是,如果用户在启动管道时选择“second”,则需要输入第二个参数:

- name: parametr2.2
      displayName: example2.2
      type: boolean

   

谢谢您的帮助 :)

我可能说错了,但用户在YAML中应该在哪里输入和提供输入?您是在触发管道之前执行PowerShell脚本或其他操作吗?还是这些值在管道开始工作之前在项目中设置?我相当确定YAML不是交互式的东西。 - Jay
1
当我通过“运行管道”按钮手动触发管道时,会弹出一个窗口:“运行管道,请在下面选择参数并手动运行管道”,然后我可以选择和输入参数。 - Rozmaryn
哇,好的。你知道吗,非常感谢你。我从来没有使用过这些高级功能,但是因为你,我现在了解了 - https://learn.microsoft.com/en-us/azure/devops/pipelines/process/runtime-parameters - Jay
2个回答

0
Azure DevOps 管道:第二个参数依赖于第一个参数
很遗憾,目前还没有解决此问题的特殊方法。
这是因为 条件 目前不支持参数。我们无法添加条件到第二个参数来基于第一个参数设置其值。
众所周知,运行时参数 用于让您更好地控制可以传递到管道的值。
既然第二个参数取决于第一个参数,就不需要我们手动控制它。
因此,对于这个问题的解决方法,我们可以使用 日志命令 并添加条件,根据第一个参数的值来设置第二个参数。
parameters:
- name: parametr1
  displayName: example1
  type: string
  default: first
  values:
  - first
  - second
  - third

trigger: none

jobs:
- job: build
  displayName: build
  pool: 
    name: MyPrivateAgent

  steps:
  - task: InlinePowershell@1
    displayName: 'SetVariableV1'
    inputs:
      Script: 'Write-Host "##vso[task.setvariable variable=parametr2.1;]123456"'
    condition: and(succeeded(), eq('${{ parameters.parametr1 }}', 'first'))

  - task: InlinePowershell@1
    displayName: 'SetVariableV2'
    inputs:
      Script: 'Write-Host "##vso[task.setvariable variable=parametr2.2;]true"'
    condition: and(succeeded(), eq('${{ parameters.parametr1 }}', 'second'))

我在我的端上测试了一下,它运行良好。


1
感谢您的好回答。 不幸的是,我的目标是第一个参数根据需要更改第二个参数的类型和显示名称,以便开发人员可以输入第二个参数但具有特定类型,从而简化工作。 因此,我怀疑它无法动态完成。 - Rozmaryn
@Rozmaryn,是的,你说得对。目前无法动态完成。您可以将此用户反馈提交到我们的主要产品建议论坛:https://developercommunity.visualstudio.com/content/idea/post.html?space=21 - Leo Liu

0
变量可以像这样在这里使用:
parameters:
  - name: name
    type: string
    values:
      - name1
      - name2

variables:
  - ${{ if eq(parameters.name, 'name1') }}:
      - name: var1
        value: '111'
      - name: var2
        value: 'string1'

  - ${{ if eq(parameters.name, 'name2') }}:
      - name: var1
        value: '222'
      - name: var2
        value: 'string2'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接