Управление переменными в группах переменных с помощью Интерфейса командной строки Azure DevOps
Azure DevOps Services
Управление переменными в Azure Pipelines имеет решающее значение для обеспечения гибкости и безопасности в рабочих процессах CI/CD. В этом руководстве показано, как использовать интерфейс командной строки Azure DevOps для создания и управления ими секретных и несекретных переменных в группе переменных Azure Pipelines. С помощью групп переменных можно централизованно управлять переменными и безопасно обрабатывать конфиденциальную информацию.
В этом руководстве вы узнаете, как:
- Определите конвейер Azure Pipelines с помощью файла YAML, хранящегося в GitHub.
- Создайте группу переменных, содержащую как секретные, так и несекретные переменные.
- Выполните конвейер с помощью интерфейса командной строки Azure DevOps и отслеживайте выполнение обработки и вывода.
Примечание.
В этом примере показана функциональность Azure DevOps CLI с группами переменных. Для повышения безопасности определите переменные в группах переменных в пользовательском интерфейсе Pipelines или свяжите группу переменных с секретами в Azure Key Vault.
Необходимые компоненты
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
- Репозиторий GitHub с установленными Azure Pipelines
- GitHub персональный маркер доступа (PAT) для доступа
- Организация Azure DevOps с личным маркером доступа (PAT) для проверки подлинности
- Разрешения администратора коллекции проектов в организации Azure DevOps
Сохранение YAML-файла конвейера
Сохраните следующее определение конвейера YAML в виде файла, который называется azure-pipelines.yml в корневом каталоге и main
ветви репозитория GitHub.
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 выполните следующий сценарий Azure DevOps CLI в оболочке Bash в Cloud Shell или локально.
#!/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