【问题标题】:YAML ADO pipeline - conditional inputsYAML ADO 管道 - 条件输入
【发布时间】:2022-10-21 15:51:20
【问题描述】:

我知道参数不能是可选的。我正在构建一个具有多个阶段的管道,但我希望有时只能运行某些阶段。

  • 想象一个为客户部署 5 个东西的管道
  • 每个事物需要 10 个输入参数。
  • 我希望有时只部署其中的 3 个,因为并非所有客户端都需要全部 5 个

使用参数我不能把它们留空然后使用逻辑如果参数为空,则跳过阶段.我可以询问要在输入中部署哪些资源,但我不能再问“嘿,根据您选择的 3 个,我现在需要这 30 个值”。

有没有办法解决?关于如何设计具有上述要求的东西的任何其他想法?

我突然想到的一件事:

  • 有一个“配置”文件,说明哪些资源被部署并具有输入值
  • 这需要有人用 JSON 或其他任何方式编写它并将其放入 repo
  • Pipeline 只会询问文件名,然后抓取文件,展开它并检索输入并运行基于此的任何阶段

这不是非常用户友好,但可以工作。

提前致谢

【问题讨论】:

  • 我突然想到,我可以使用所有参数的默认值作为''(空),因此你可以只填写你需要的那些吗?

标签: azure-devops azure-pipelines azure-pipelines-yaml


【解决方案1】:

根据您的要求,您需要根据选择的阶段输入相关参数。

恐怕没有直接的方法可以达到你的要求。

参数分配和阶段手动选择是同时进行的,因此无法根据手动选择的阶段设置所需的参数。

同时,运行管道时参数值不能设置为空。该值是必需的。

有没有办法解决?关于如何设计具有上述要求的东西的任何其他想法?

我建议您可以根据参数值运行 Pipeline 阶段。

对于参数值,您可以将它们设置为特定值(例如,无)然后您可以使用expression 来检查阶段是否需要运行。

这是 YAML 示例:

parameters:
- name: test3
  displayName: Run Tests?
  default: 'None'
- name: test
  displayName: Run Tests?
  type: string
  default: 'None'
- name: test1
  displayName: Run Tests?
  type: string
  default: 'None'
- name: test2
  displayName: Run Tests?
  type: string
  default: 'None'

stages:
  - ${{ if and(ne(parameters.test3, 'None'), ne(parameters.test, 'None')) }}:
    - stage: stage1
      jobs:
      - job: test1
        steps:
        - script: echo "1"
  - ${{ if and(ne(parameters.test1, 'None'), ne(parameters.test2, 'None')) }}:
    - stage: stage2
      jobs:
      - job: test2
        steps:
        - script: echo "1"

当相关参数值为none时,将跳过该阶段。或者如果我们为所有参数输入相关值,它就会运行相应的阶段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 2022-09-23
    • 2022-08-10
    • 1970-01-01
    相关资源
    最近更新 更多