如何在 Azure Pipelines yml 模板中使用变量组?

Dan*_*Dan 5 azure-devops azure-pipelines azure-pipelines-tasks azure-pipelines-yaml

所以我正在研究一堆管道,并且我已经使用 yml 模板设置了所有内容。然而,我很难在模板步骤中扩展受保护的变量。我尝试通过正常方式传递受保护的变量,但它们似乎没有得到扩展。然后我尝试使用变量组,据说我可以直接在模板内部引用它。我说据说是因为微软在他们的网站上这么说https://learn.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=yaml

“您还可以在模板中引用变量组。在模板variables.yml中,引用了my-variable-group组。变量组中包含一个名为myhello的变量。”

variables:
- group: my-variable-group
Run Code Online (Sandbox Code Playgroud)

但是,每当我variables在模板代码中包含一个部分时,Azure DevOps 会在运行管道之前解析 yml 时立即抱怨它。它会输出以下消息:

/ymls/my-template@my-repo(行:1,列:1):意外值“变量”

我不坚持使用变量组,我只是想在我的 yml 模板中扩展受保护的变量。有人知道该怎么做吗???

非常感谢任何帮助!

Ger*_*xGR 15

您应该在主管道上而不是在模板中定义变量组。然后您可以调用模板并使用您定义的变量。

例如,假设您有main.yml,它调用template.yml

您应该定义以下变量组main.yml

variables:
- group: my-variable-group
Run Code Online (Sandbox Code Playgroud)

并在template.yml上调用该变量

$(MY_VARIABLE)
Run Code Online (Sandbox Code Playgroud)

https://thomasthornton.cloud/2021/09/02/referencing-variable-groups-in-azure-devops-pipeline-templates/


Dan*_*Dan 3

终于想通了。感谢@GeralexGR。事实证明,当您在主管道 yml 中引用变量组时,您会自动在模板 yml 中访问它。但对于正常的脚本步骤,您仍然必须显式传递它。

然后它看起来…… 像这样:

主管道.yml:

variables:
- group: my-variable-group
...
jobs:
- job: my-job
  steps:
  - template: ymls/my-template.yml@my-repo
  # no need to pass in the variable group s parameter
Run Code Online (Sandbox Code Playgroud)

我的模板.yml:

steps:
- task: ShellScript@2
  inputs:
    scriptPath: 'my-script.sh'
    args: '$(my-secret-variable)'
Run Code Online (Sandbox Code Playgroud)