管理变量组

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

本文介绍如何在 Azure Pipelines 中创建和使用变量组。 变量组存储您可以传递到 YAML 管道或在项目中的多个管道中提供的值和机密。

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

变量组遵循库安全模型的角色和权限。

先决条件

  • 有权创建管道和变量的 Azure DevOps Services 组织和项目。
  • Azure DevOps 组织或 Azure DevOps Server 集合中的项目。 如果没有项目,请创建一个项目
  • 如果使用 Azure DevOps CLI,则需要使用 Azure DevOps CLI 扩展的 Azure CLI 2.30.0 或更高版本。 有关详细信息,请参阅 Azure DevOps CLI 入门

设置 CLI

如果使用 Azure DevOps CLI,则需要设置 CLI 以与 Azure DevOps 组织和项目配合使用。

  1. 使用 az login 命令登录到 Azure DevOps 组织。

    az login
    
  2. 如果出现提示,请从终端窗口中显示的列表中选择订阅。

  3. 使用以下命令确保运行最新版本的 Azure CLI 和 Azure DevOps 扩展。

    az upgrade
    az extension add --name azure-devops --upgrade
    
  4. 在 Azure DevOps CLI 命令中,可以使用以下命令设置默认组织和项目:

    az devops configure --defaults organization=<YourOrganizationURL> project=<Project Name or ID>`
    

    如果尚未设置默认组织和项目,可以使用 detect=true 命令中的参数根据当前目录自动检测组织和项目上下文。 如果未配置或检测到默认值,则需要在命令中显式指定 orgproject 参数。

创建变量组

可以为项目中的管道运行创建变量组。

注意

若要创建机密变量组以将 Azure 密钥保管库中的机密链接为变量,请按照 Azure 密钥库将变量组链接到机密的说明进行操作。

  1. 在 Azure DevOps 项目中,从左侧菜单中选择管道>

  2. 在“库”页上,选择“+ 变量组”。

    “库”屏幕和“添加变量组”按钮的屏幕截图。

  3. 在新变量组页面的“属性”下,输入变量组的名称和可选描述。

  4. 在“变量”下,选择“+ 添加”,然后输入要包含在组中的变量名称和值。 如果想要加密并安全地存储该值,请选择变量旁边的锁定图标。

  5. 选择“+ 添加”以添加每个新变量。 添加完变量后,选择“保存”。

    配置和保存变量组的屏幕截图。

现在就可以在项目管道中使用此变量组。

更新变量组

可以使用 Azure Pipelines 用户界面更新变量组。

  1. 在 Azure DevOps 项目中,从左侧菜单中选择管道>
  2. 在“库”页面上,选择要更新的变量组。 也可以将鼠标悬停在变量组列表上,选择“更多选项”图标,然后从菜单中选择“编辑”。
  3. 在变量组页面中,更改任何属性,然后选择“保存”。

删除变量组

可以在 Azure Pipelines 用户界面中删除变量组。

  1. 在 Azure DevOps 项目中,从左侧菜单中选择管道>
  2. 在“库”页面上,将鼠标悬停在要删除的变量组上,然后选择“更多选项”图标。
  3. 从菜单中选择“删除”,然后在确认屏幕上选择“删除”。

管理变量组中的变量

可以使用 Azure Pipelines 用户界面更改、添加或删除变量组中的变量。

  1. 在 Azure DevOps 项目中,从左侧菜单中选择管道>
  2. 在“库”页面上,选择要更新的变量组。 也可以将鼠标悬停在变量组列表上,选择“更多选项”图标,然后从菜单中选择“编辑”。
  3. 在变量组页面上可以:
    • 更改任何变量名或变量值。
    • 选择变量名旁边的垃圾桶图标,删除任何变量。
    • 选择变量值旁边的锁定图标,将变量更改为机密或非机密变量。
    • 通过选择“+ 添加”以添加新的变量。
  4. 进行更改后,请选择“保存”

在管道中使用变量组

可以在 YAML 或经典管道中使用变量组。 对变量组所做的更改会自动提供给该变量组所链接的所有定义或阶段。

如果仅在 YAML 管道中指定变量组,任何可以将代码推送到存储库的人都可以提取变量组中机密的内容。 因此,要在 YAML 管道中使用变量组,必须授权管道使用该组。 可以授权管道在 Azure Pipelines 用户界面中使用变量组,也可以使用 Azure DevOps CLI。

通过管道 UI 进行授权

可以使用 Azure Pipelines 用户界面授权管道使用变量组。

  1. 在 Azure DevOps 项目中,从左侧菜单中选择管道>
  2. 在“库”页面上,选择要授权的变量组。
  3. 在变量组页面上,选择“管道权限”选项卡。
  4. 在“管道权限”屏幕上选择 +,然后选择要授权的管道。 或者,选择“更多操作”图标,选择“打开访问权限”,然后再次选择“打开访问权限”以进行确认。

选择管道后,该管道就有权使用变量组。 要授权另一个管道,请再次选择 + 图标。 选择“开放访问”可授权所有项目管道使用变量组。 如果组中没有任何机密,开放访问可能是不错的选择。

另一种授权变量组的方法是选择管道,选择“编辑”,然后手动将生成排队。 此时会出现一个资源授权错误,然后可以显式地将管道添加为变量组的授权用户。

通过 Azure DevOps CLI 进行授权

在 Azure DevOps 服务中,可以使用 Azure DevOps CLI 来授权变量组。

Azure DevOps Server 不支持 Azure DevOps CLI 命令。

要授权所有项目管道使用变量组,请将 az pipelines variable-group create 命令中的 authorize 参数设置为 true。 如果组中没有任何机密,则此开放访问可能是一个不错的选择。

授权 YAML 管道使用变量组后,可以在管道中的组中使用变量。

若要使用变量组中的变量,请在 YAML 管道文件中添加对组名称的引用。

variables:
- group: my-variable-group

可以在同一管道中引用多个变量组。 如果多个变量组包含具有相同名称的变量,则使用文件中变量的最后一个变量组将设置变量的值。 有关变量优先级的详细信息,请参阅变量的扩展

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

variables:
- group: my-variable-group

YAML 管道会引用 variables.yml 模板,并使用变量组 my-variable-group 中的变量 $(myhello)

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

在链接变量组中使用变量

访问链接变量组中的变量值的方式与访问管道中定义的变量的方式相同。 例如,要访问链接到管道的变量组中名为 customer 的变量的值,可以在任务参数或脚本中使用 $(customer)

如果在管道文件中同时使用独立变量和变量组,请对独立变量使用 name-value 语法。

variables:
- group: my-variable-group
- name: my-standalone-variable
  value: 'my-standalone-variable-value'

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

要使用运行时表达式:

variables:
- group: my-variable-group
- name: my-passed-variable
  value: $[variables.myhello]
- script: echo $(my-passed-variable)

要使用宏语法:

variables:
- group: my-variable-group

steps:
- script: echo $(myhello)

无法直接在脚本中访问秘密变量,包括加密变量和密钥保管库变量。 必须将这些变量作为参数传递给任务。 有关详细信息,请参阅机密变量