使用 Azure DevOps CLI 管理變數群組中的變數
Azure DevOps Services
在 Azure Pipelines 中管理變數對於維護 CI/CD 工作流程中的彈性和安全性至關重要。 本指南示範如何使用 Azure DevOps CLI 在 Azure Pipelines 變數群組內建立和管理秘密和非秘密變數。 藉由使用變數群組,您可以集中管理變數,並確保能安全地處理敏感性資訊。
使用本指南中的範例,您將瞭解如何:
- 使用儲存在 GitHub 中的 YAML 檔案定義 Azure Pipelines 管線。
- 建立包含秘密和非Secret 變數的變數群組。
- 使用 Azure DevOps CLI 執行管線,並監視執行處理和輸出。
注意
此範例示範 Azure DevOps CLI 與變數群組的功能。 為了提高安全性,請在 Pipelines UI 中的變數群組中定義變數,或將變數群組連結至 Azure 金鑰保存庫 中的秘密。
必要條件
在 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。
- 已安裝 Azure Pipelines 的 GitHub 存放 庫
- 用於存取的 GitHub 個人存取令牌 (PAT)
- 具有個人存取令牌的 Azure DevOps 組織(PAT)進行驗證
- Azure DevOps 組織中的專案集合系統管理員許可權
儲存管線 YAML 檔案
將下列 YAML 管線定義儲存為名為 azure-pipelines.yml 的檔案,並儲存在 GitHub 存放庫的根目錄和 main
分支中。
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 服務連線
- 管道
- 具有兩個非secret 變數和一個秘密變數的變數群組
執行腳本之前,請取代下列佔位元,如下所示:
<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 殼層中執行下列 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