使用 Azure DevOps CLI 管理变量组中的变量
Azure DevOps Services
在 Azure Pipelines 中管理变量对于在 CI/CD 工作流中保持灵活性和安全性至关重要。 本指南演示如何使用 Azure DevOps CLI 在 Azure Pipelines 变量组中创建和管理机密和非机密变量。 通过使用变量组,可以集中管理变量并确保安全地处理敏感信息。
本指南中的示例介绍如何:
- 使用存储在 GitHub 中的 YAML 文件定义 Azure Pipelines 管道。
- 创建包含机密变量和非机密变量的变量组。
- 使用 Azure DevOps CLI 执行管道,并监视运行处理和输出。
注意
此示例使用变量组降级 Azure DevOps CLI 的功能。 为了提高安全性,请在 Pipelines UI 中的变量组中定义变量,或将变量组链接到 Azure Key Vault 中的机密。
先决条件
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 中的 Bash 快速入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- GitHub 存储库与 Azure Pipelines 已安装
- 用于访问的 GitHub 个人访问令牌 (PAT)
- 将个人访问令牌 (PAT) 用于身份验证的 Azure DevOps 组织
- Azure DevOps 组织中的项目集合管理员权限
保存管道 YAML 文件
将以下 YAML 管道定义另存为 GitHub 存储库的根目录和 分支中名为 azure-pipelines.ymlmain
的文件。
parameters:
- name: image
displayName: 'Pool image'
default: ubuntu-latest
values:
- windows-latest
- windows-latest
- ubuntu-latest
- ubuntu-latest
- macOS-latest
- macOS-latest
- name: test
displayName: Run Tests?
type: boolean
default: false
variables:
- group: "Contoso Variable Group"
- name: va
value: $[variables.a]
- name: vb
value: $[variables.b]
- name: vcontososecret
value: $[variables.contososecret]
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- script: |
echo "Hello, world!"
echo "Pool image: ${{ parameters.image }}"
echo "Run tests? ${{ parameters.test }}"
displayName: 'Show runtime parameter values'
- script: |
echo "a=$(va)"
echo "b=$(vb)"
echo "contososecret=$(vcontososecret)"
echo
echo "Count up to the value of the variable group's nonsecret variable *a*:"
for number in {1..$(va)}
do
echo "$number"
done
echo "Count up to the value of the variable group's nonsecret variable *b*:"
for number in {1..$(vb)}
do
echo "$number"
done
echo "Count up to the value of the variable group's secret variable *contososecret*:"
for number in {1..$(vcontososecret)}
do
echo "$number"
done
displayName: 'Test variable group variables (secret and nonsecret)'
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
示例脚本
此示例执行以下任务:
- 创建 DevOps 资源
- 运行管道
- 修改变量值三次
- 每次更改变量值时再次运行管道
该脚本在 Azure DevOps 中创建以下资源:
- DevOps 组织中的项目
- GitHub 服务连接
- 管道
- 包含两个非机密变量和一个机密变量的变量组
在运行脚本之前,请替换以下占位符,具体如下:
<devops-organization>
Azure DevOps 组织名称<github-organization>
GitHub 组织名称或用户名<github-repository>
GitHub 存储库名称<pipelinename>
管道的名称,介于 3-19 个字符之间,仅包含数字和小写字母。 脚本会添加五位数的唯一标识符。
在本地环境中保存 GitHub PAT。
AZURE_DEVOPS_EXT_GITHUB_PAT=<your-github-pat>
将 YAML 文件存储在 GitHub 中后,在 Cloud Shell 的 Bash shell 中或本地运行以下 Azure DevOps CLI 脚本。
#!/bin/bash
# Provide placeholder variables.
devopsOrg="https://dev.azure.com/<devops-organization>"
githubOrg="<github-organization>"
githubRepo="<github-repository>"
pipelineName="<pipelinename>"
repoName="$githubOrg/$githubRepo"
repoType="github"
branch="main"
# Declare other variables.
uniqueId=$RANDOM
devopsProject="Contoso DevOps Project $uniqueId"
serviceConnectionName="Contoso Service Connection $uniqueId"
# Sign in to Azure CLI and follow the sign-in instructions, if necessary.
echo "Sign in."
az login
# Sign in to Azure DevOps with your Azure DevOps PAT, if necessary.
echo "Sign in to Azure DevOps."
az devops login
# Create the Azure DevOps project and set defaults.
projectId=$(az devops project create \
--name "$devopsProject" --organization "$devopsOrg" --visibility private --query id)
projectId=${projectId:1:-1} # Just set to GUID; drop enclosing quotes.
az devops configure --defaults organization="$devopsOrg" project="$devopsProject"
pipelineRunUrlPrefix="$devopsOrg/$projectId/_build/results?buildId="
# Create GitHub service connection.
githubServiceEndpointId=$(az devops service-endpoint github create \
--name "$serviceConnectionName" --github-url "https://www.github.com/$repoName" --query id)
githubServiceEndpointId=${githubServiceEndpointId:1:-1} # Just set to GUID; drop enclosing quotes.
# Create the pipeline.
pipelineId=$(az pipelines create \
--name "$pipelineName" \
--skip-first-run \
--repository $repoName \
--repository-type $repoType \
--branch $branch \
--service-connection $githubServiceEndpointId \
--yml-path azure-pipelines.yml \
--query id)
# Create a variable group with 2 non-secret variables and 1 secret variable.
# (contososecret < a < b). Then run the pipeline.
variableGroupId=$(az pipelines variable-group create \
--name "$variableGroupName" --authorize true --variables a=12 b=29 --query id)
az pipelines variable-group variable create \
--group-id $variableGroupId --name contososecret --secret true --value 17
pipelineRunId1=$(az pipelines run --id $pipelineId --open --query id)
echo "Go to the pipeline run's web page to view the output results of the 'Test variable group variables' job for the 1st run."
echo "If the web page doesn't automatically appear, go to:"
echo " ${pipelineRunUrlPrefix}${pipelineRunId1}"
read -p "Press Enter to change the value of one of the variable group's nonsecret variables, then run again:"
# Change the value of one of the variable group's nonsecret variables.
az pipelines variable-group variable update \
--group-id $variableGroupId --name a --value 22
pipelineRunId2=$(az pipelines run --id $pipelineId --open --query id)
echo "Go to the pipeline run's web page to view the output results of the 'Test variable group variables' job for the 2nd run."
echo "If the web page doesn't automatically appear, go to:"
echo " ${pipelineRunUrlPrefix}${pipelineRunId2}"
read -p "Press Enter to change the value of the variable group's secret variable, then run once more:"
# Change the value of the variable group's secret variable.
az pipelines variable-group variable update \
--group-id $variableGroupId --name contososecret --value 35
pipelineRunId3=$(az pipelines run --id $pipelineId --open --query id)
echo "Go to the pipeline run's web page to view the output results of the 'Test variable group variables' job for the 3rd run."
echo "If the web page doesn't automatically appear, go to:"
echo " ${pipelineRunUrlPrefix}${pipelineRunId3}"
read -p "Press Enter to continue:"
清理资源
为了避免产生 Azure 项目费用,可以删除示例项目,该示例项目也会删除其资源。
从以下命令的输出复制示例项目的 id
:
az devops project list --org <your-organization>
通过运行以下命令删除项目:
az devops project delete --id <project-id> --org <your-organization> --yes
通过运行以下命令清理本地环境:
export AZURE_DEVOPS_EXT_GITHUB_PAT=""
az devops configure --defaults organization="" project=""
Azure CLI 参考
本文中的示例使用以下 Azure CLI 命令:
- az devops configure
- az devops project create
- az devops project delete
- az devops project delete
- az devops service-endpoint github create
- az login
- az pipelines create
- az pipelines delete
- az pipelines run
- az pipelines variable-group create
- az pipelines variable-group delete
- az pipelines variable-group variable create
- az pipelines variable-group variable update