添加和使用变量组

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

变量组存储可能要传递到 YAML 管道或跨多个管道提供的值和机密。 可以在同一项目中的多个管道中共享和使用变量组。

变量组中的机密变量是受保护的资源。 可以添加审批、检查和管道权限的组合,以限制对变量组中机密变量的访问。 对非机密变量的访问不受审批、检查和管道权限的限制。

创建变量组

无法在 YAML 中创建变量组,但可以使用变量组,如使用变量组中所述。

使用变量组

若要使用变量组中的变量,请在 YAML 文件中添加对组的引用:

variables:
- group: my-variable-group

然后,可以在 YAML 文件中使用变量组中的变量。

如果同时使用变量和变量组,则对单个非分组变量使用 name/value 语法:

variables:
- group: my-variable-group
- name: my-bare-variable
  value: 'value of my-bare-variable'

若要引用变量组,请使用宏语法或运行时表达式。 在下面的示例中,组 my-variable-group 具有名为 myhello 的变量。

variables:
- group: my-variable-group
- name: my-passed-variable
  value: $[variables.myhello] # uses runtime expression

steps:
- script: echo $(myhello) # uses macro syntax
- script: echo $(my-passed-variable) 

可以在同一管道中引用多个变量组。 如果多个变量组包含同一变量,则 YAML 文件中最后包含的变量组将设置变量的值。

variables:
- group: my-first-variable-group
- group: my-second-variable-group

还可以在模板中引用变量组。 在 variables.yml 模板中,将引用 my-variable-group 组。 变量组包括名为 myhello 的变量。

# variables.yml
variables:
- group: my-variable-group

在此管道中,包含变量组 my-variable-group 中的 $(myhello) 并引用 variables.yml

# azure-pipeline.yml
stages:
- stage: MyStage
  variables:
  - template: variables.yml
  jobs:
  - job: Test
    steps:
    - script: echo $(myhello)

授权变量组

若要使用变量组,必须授权该组。 如果仅在 YAML 中指定变量组,则任何可以将代码推送到存储库的人都可以提取变量组中机密的内容。 若要授权组,可使用以下技术之一:

  • 要授权任何管道使用变量组,转到 Azure Pipelines。 如果组中没有任何机密,这可能是不错的选择。 选择“库”>“变量组”,然后选择相关的变量组,并启用“允许访问所有管道”设置。

  • 要为特定管道授权变量组,请打开管道,选择“编辑”,然后手动将生成排队。 你将看到资源授权错误和针对该错误的“对资源授权”操作。 选择此操作,以将管道显式添加为变量组的授权用户。

注意

如果将变量组添加到管道,并且生成中未按预期收到资源授权错误,则关闭“允许访问所有管道”设置。

访问链接变量组中的变量值的方式与访问在管道本身中定义的变量的方式相同。 例如,要访问链接到管道的变量组中名为 customer 的变量的值,请在任务参数或脚本中使用 $(customer)。 但是,不能直接在脚本中访问机密变量(加密变量和密钥保管库变量),而是必须将其作为参数传递给任务。 有关详细信息,请参阅机密

对变量组所做的更改将自动适用于变量组链接的所有定义或阶段。

列出变量组

使用 CLI 通过 az pipelines variable-group list 命令列出管道运行的变量组。 如果你还不熟悉适用于 CLI 的 Azure DevOps 扩展,请参阅 Azure DevOps CLI 入门

az pipelines variable-group list [--action {manage, none, use}]
                                 [--continuation-token]
                                 [--group-name]
                                 [--org]
                                 [--project]
                                 [--query-order {Asc, Desc}]
                                 [--top]

可选参数

  • action:指定可对变量组执行的操作。 接受的值为 manage、none 和 use。
  • continuation-token:列出提供延续令牌后的变量组。
  • group-name:变量组的名称。 接受通配符,例如 new-var*
  • org:Azure DevOps 组织 URL。 使用 az devops configure -d organization=ORG_URL 配置默认组织。 如果未配置为默认或通过 git config 进行选取,则为必需。 示例:--org https://dev.azure.com/MyOrganizationName/
  • project:项目的名称或 ID。 使用 az devops configure -d project=NAME_OR_ID 配置默认项目。 如果未配置为默认或通过 git config 进行选取,则为必需。
  • query-order:按升序或降序(默认)顺序列出结果。 接受的值为 Asc 和 Desc。
  • top:要列出的变量组数。

示例

以下命令按升序列出前三个变量组,并返回表格式的结果。

az pipelines variable-group list --top 3 --query-order Asc --output table

ID    Name               Type    Number of Variables
----  -----------------  ------  ---------------------
1     myvariables        Vsts    2
2     newvariables       Vsts    4
3     new-app-variables  Vsts    3

显示变量组的详细信息

使用 az pipelines variable-group show 命令显示项目中变量组的详细信息。 如果你还不熟悉适用于 CLI 的 Azure DevOps 扩展,请参阅 Azure DevOps CLI 入门

az pipelines variable-group show --group-id
                                 [--org]
                                 [--project]

参数

  • group-id:必需。 变量组的 ID。 若要查找变量组 ID,请参阅列出变量组
  • org:Azure DevOps 组织 URL。 使用 az devops configure -d organization=ORG_URL 配置默认组织。 如果未配置为默认或通过 git config 进行选取,则为必需。 示例:--org https://dev.azure.com/MyOrganizationName/
  • project:项目的名称或 ID。 使用 az devops configure -d project=NAME_OR_ID 配置默认项目。 如果未配置为默认或通过 git config 进行选取,则为必需。

示例

以下命令显示 ID 为 4 的变量组的详细信息,并返回 YAML 格式的结果。

az pipelines variable-group show --group-id 4 --output yaml

authorized: false
description: Variables for my new app
id: 4
name: MyNewAppVariables
providerData: null
type: Vsts
variables:
  app-location:
    isSecret: null
    value: Head_Office
  app-name:
    isSecret: null
    value: Fabrikam

删除变量组

使用 az pipelines variable-group delete 命令删除项目中的变量组。 如果你还不熟悉适用于 CLI 的 Azure DevOps 扩展,请参阅 Azure DevOps CLI 入门

az pipelines variable-group delete --group-id
                                   [--org]
                                   [--project]
                                   [--yes]

参数

  • group-id:必需。 变量组的 ID。 若要查找变量组 ID,请参阅列出变量组
  • org:Azure DevOps 组织 URL。 使用 az devops configure -d organization=ORG_URL 配置默认组织。 如果未配置为默认或通过 git config 进行选取,则为必需。 示例:--org https://dev.azure.com/MyOrganizationName/
  • project:项目的名称或 ID。 使用 az devops configure -d project=NAME_OR_ID 配置默认项目。 如果未配置为默认或通过 git config 进行选取,则为必需。
  • yes:可选。 不提示进行确认。

示例

以下命令删除 ID 为 1 的变量组,并且不提示确认。

az pipelines variable-group delete --group-id 1 --yes

Deleted variable group successfully.

将变量添加到变量组

使用 Azure DevOps CLI,可以使用 az pipelines variable-group variable create 命令将变量添加到管道中的变量组。 如果你还不熟悉适用于 CLI 的 Azure DevOps 扩展,请参阅 Azure DevOps CLI 入门

az pipelines variable-group variable create --group-id
                                            --name
                                            [--org]
                                            [--project]
                                            [--secret {false, true}]
                                            [--value]

参数

  • group-id:必需。 变量组的 ID。 若要查找变量组 ID,请参阅列出变量组
  • 名称:必需。 要添加的变量的名称。
  • org:Azure DevOps 组织 URL。 使用 az devops configure -d organization=ORG_URL 配置默认组织。 如果未配置为默认或通过 git config 进行选取,则为必需。 示例:--org https://dev.azure.com/MyOrganizationName/
  • project:项目的名称或 ID。 使用 az devops configure -d project=NAME_OR_ID 配置默认项目。 如果未配置为默认或通过 git config 进行选取,则为必需。
  • secret:可选。 指示变量的值是否为机密。 接受的值为 false 和 true。
  • value:非机密变量是必需的。 变量的值。 对于机密变量,如果未提供 value 参数,则会从前缀为 AZURE_DEVOPS_EXT_PIPELINE_VAR_ 的环境变量中选取,或提示用户通过标准输入进行输入。 例如,可以使用环境变量 AZURE_DEVOPS_EXT_PIPELINE_VAR_MySecret 输入名为 mySecret 的变量。

示例

以下命令在 ID 为 4的变量组中创建变量。 新变量名为 requires-login ,值为 True,结果以表格式显示。

az pipelines variable-group variable create --group-id 4 --name requires-login --value True --output table

Name            Is Secret    Value
--------------  -----------  -------
requires-login  False        True

列出变量组中的变量

可以使用 az pipelines variable-group variable list 命令列出变量组中的变量。 如果你还不熟悉适用于 CLI 的 Azure DevOps 扩展,请参阅 Azure DevOps CLI 入门

az pipelines variable-group variable list --group-id
                                          [--org]
                                          [--project]

参数

  • group-id:必需。 变量组的 ID。 若要查找变量组 ID,请参阅列出变量组
  • org:Azure DevOps 组织 URL。 使用 az devops configure -d organization=ORG_URL 配置默认组织。 如果未配置为默认或通过 git config 进行选取,则为必需。 示例:--org https://dev.azure.com/MyOrganizationName/
  • project:项目的名称或 ID。 使用 az devops configure -d project=NAME_OR_ID 配置默认项目。 如果未配置为默认或通过 git config 进行选取,则为必需。

示例

以下命令列出 ID 为 4 的变量组中的所有变量,并以表格式显示结果。

az pipelines variable-group variable list --group-id 4 --output table

Name            Is Secret    Value
--------------  -----------  -----------
app-location    False        Head_Office
app-name        False        Fabrikam
requires-login  False        True

更新变量组中的变量

使用 az pipelines variable-group variable update 命令更新变量组中的变量。 如果你还不熟悉适用于 CLI 的 Azure DevOps 扩展,请参阅 Azure DevOps CLI 入门

az pipelines variable-group variable update --group-id
                                            --name
                                            [--new-name]
                                            [--org]
                                            [--project]
                                            [--prompt-value {false, true}]
                                            [--secret {false, true}]
                                            [--value]

参数

  • group-id:必需。 变量组的 ID。 若要查找变量组 ID,请参阅列出变量组
  • 名称:必需。 要添加的变量的名称。
  • new-name:可选。 指定以更改变量的名称。
  • org:Azure DevOps 组织 URL。 使用 az devops configure -d organization=ORG_URL 配置默认组织。 如果未配置为默认或通过 git config 进行选取,则为必需。 示例:--org https://dev.azure.com/MyOrganizationName/
  • project:项目的名称或 ID。 使用 az devops configure -d project=NAME_OR_ID 配置默认项目。 如果未配置为默认或通过 git config 进行选取,则为必需。
  • prompt-value:设置为 true 可使用环境变量更新机密变量的值,或者通过标准输入进行提示。 接受的值为 false 和 true。
  • secret:可选。 指示变量的值是否保持机密。 接受的值为 false 和 true。
  • value:更新变量的值。 对于机密变量,请使用 prompt-value 参数通过标准输入来输入。 对于非交互式控制台,可以从前缀为 AZURE_DEVOPS_EXT_PIPELINE_VAR_ 的环境变量中选取。 例如,可以使用环境变量 AZURE_DEVOPS_EXT_PIPELINE_VAR_MySecret 输入名为 mySecret 的变量。

示例

以下命令在 ID 为 4 的变量组中使用新值 False 更新 requires-login 变量。 此命令指定变量是机密,并且以 YAML 格式显示结果。 请注意,输出将值显示为 null 而不是 False ,因为值是机密隐藏值。

az pipelines variable-group variable update --group-id 4 --name requires-login --value False --secret true --output yaml

requires-login:
  isSecret: true
  value: null

从变量组中删除变量

使用 az pipelines variable-group variable delete 命令从变量组中删除变量。 如果你还不熟悉适用于 CLI 的 Azure DevOps 扩展,请参阅 Azure DevOps CLI 入门

az pipelines variable-group variable delete --group-id
                                            --name
                                            [--org]
                                            [--project]
                                            [--yes]

参数

  • group-id:必需。 变量组的 ID。 若要查找变量组 ID,请参阅列出变量组
  • 名称:必需。 要删除的变量的名称。
  • org:Azure DevOps 组织 URL。 使用 az devops configure -d organization=ORG_URL 配置默认组织。 如果未配置为默认或通过 git config 进行选取,则为必需。 示例:--org https://dev.azure.com/MyOrganizationName/
  • project:项目的名称或 ID。 使用 az devops configure -d project=NAME_OR_ID 配置默认项目。 如果未配置为默认或通过 git config 进行选取,则为必需。
  • yes:可选。 不提示进行确认。

示例

以下命令从 ID 为 4 的变量组中删除 requires-login 变量,并提示进行确认。

az pipelines variable-group variable delete --group-id 4 --name requires-login

Are you sure you want to delete this variable? (y/n): y
Deleted variable 'requires-login' successfully.

注意

不支持使用 Azure 基于角色的访问控制 (Azure RBAC) 的密钥保管库。

将现有 Azure 密钥保管库链接到变量组,并将选择性保管库机密映射到变量组。

  1. 在“变量组”页面中,启用“Azure 密钥保管库中的机密作为变量进行链接”。 你将需要一个包含机密的现有密钥保管库。 使用 Azure 门户创建密钥保管库。

    屏幕截图显示变量组与 Azure 密钥保管库的集成。

  2. 指定 Azure 订阅终结点和包含机密的保管库的名称。

    为获取机密,请确保 Azure 服务连接在保管库上至少具有 Get 和 List 管理权限。 通过选择保管库名称旁边的“授权”,允许 Azure Pipelines 设置这些权限。 或者,在 Azure 门户中手动设置权限:

    1. 打开保管库的“设置”,然后选择“访问策略”>“新增”。
    2. 选择“选择主体”,然后选择客户端帐户的服务主体。
    3. 选择“机密权限”,并确保 Get 和 List 已勾选。
    4. 选择“确定”以保存更改。
  3. 在“变量组”页面上,选择“+ 添加”,从保管库中选择要映射到此变量组的特定机密。

管理密钥保管库机密

请参阅以下有关管理机密的有用提示列表。

  • 仅将机密“名称”映射到变量组,而不机密值。 从保管库提取的最新机密值用于链接到变量组的管道运行。

  • 对密钥保管库中现有机密所做的任何更改都将自动提供给使用变量组的所有管道。

  • 在保管库中添加或删除新机密时,不会自动更新关联的变量组。 必须显式更新变量组中包含的机密,以便正确执行使用变量组的管道。

  • Azure 密钥保管库支持在 Azure 中存储和管理加密密钥和机密。 目前,Azure Pipelines 变量组集成仅支持映射 Azure 密钥保管库中的机密。 不支持加密密钥和证书。

展开组中的变量

如果在组中设置了某个变量并在 YAML 文件中使用此变量,这等于 YAML 文件中的其他已定义变量。 有关变量优先级的详细信息,请参阅变量