参数可以在一个 YAML 文件中定义并在另一个 YAML 文件中重用吗?

wot*_*324 8 azure-devops azure-pipelines azure-pipelines-yaml

长话短说

是否可以在模板 YAML 中包含参数及其值,并在准备运行管道时让主 YAML 读取列表并将它们显示在下拉列表中?

与“变量重用”的 MS 示例非常相似,如下所示

# File: vars.yml
variables:
  favoriteVeggie: 'brussels sprouts'
Run Code Online (Sandbox Code Playgroud)
# File: azure-pipelines.yml

variables:
- template: vars.yml  # Template reference

steps:
- script: echo My favorite vegetable is ${{ variables.favoriteVeggie }}.
Run Code Online (Sandbox Code Playgroud)

细节

我有一个大约 50 个值的列表,这些值每周都在增长。当运维人员运行我的管道时,我希望他们从下拉列表中选择一个值。

这可以简单地通过在管道 YAML 文件中指定参数块来实现azure-pipeline.yml

parameters:
- name: subscription
  displayName: Subscription Name
  type: string
  default: sub A
  values:
  - sub A
  - sub B
  - sub C
  - sub D
Run Code Online (Sandbox Code Playgroud)

这给了我 UI 中的下拉菜单:

运行管道下拉菜单

在上面的示例中,只有 4 个值,但是,我们有超过 50 个值(订阅)并且还在不断增加。我正在尝试设计一种方法,其中 1) 运维人员不必编辑管道 2) 保持主管道文件简洁。

我知道目前无法动态填充值列表,但我正在考虑使用模板 YAML 文件,该文件仅包含值,并且它将读取模板,填充下拉列表。然后,让脚本/管道动态更新模板文件中的值是一项相当简单的任务。

阅读文档和一些博客,我相信这可能是可能的,但我还没有成功破解它。

看来参数块可以采用“任何 YAML 结构”,尽管我还没有找到合适的例子。除其他外,这是我尝试过的:

模板/订阅.yml

- name: subscription
  displayName: Subscription Name
  type: string
  default: sub A
  values:
  - sub A
  - sub B
  - sub C
  - sub D``

Run Code Online (Sandbox Code Playgroud)

azure-pipelines.yml

...
template: templates/subscriptions.yml
  parameters:
    subscription: []

stages:
- stage: Example
  displayName: 1.0 Demo Stage
  jobs:
...
Run Code Online (Sandbox Code Playgroud)

我想知道我的问题是否是我需要在开始时读取参数,而这不受支持。它仅适用于阶段/工作等。

如果有人有任何想法,如果您能指出正确的方向,我将不胜感激。

TIA

Kev*_*SFT 2

根据您的要求,恐怕暂时没有这样的方法可以满足您的要求。

Azure Devops中的yaml模板需要被主yaml(例如azure-pipelines.yml)引用来传递值。

请参阅此文档:Yaml schema

yaml中的parameters字段无法调用yaml中的参数模板。因此,如果只定义纯参数,则无法在主yaml中调用它们。

此方法仅受变量支持。

但你的要求是有道理的。我建议您可以在我们的 UserVoice 网站提交建议票。