Gerenciar variáveis em grupos de variáveis com a CLI do Azure DevOps

Azure DevOps Services

O gerenciamento de variáveis no Azure Pipelines é crucial para manter a flexibilidade e a segurança em seus fluxos de trabalho de CI/CD. Este guia demonstra como usar a CLI do Azure DevOps para criar e gerenciar variáveis secretas e não secretas em um grupo de variáveis do Azure Pipelines. Ao usar grupos de variáveis, você pode centralizar o gerenciamento de variáveis e garantir que informações confidenciais sejam tratadas com segurança.

Com o exemplo deste guia, você aprenderá a:

  • Defina um pipeline do Azure Pipelines usando um arquivo YAML armazenado no GitHub.
  • Crie um grupo de variáveis contendo variáveis secretas e não secretas.
  • Execute o pipeline usando a CLI do Azure DevOps e monitore o processamento e a saída de execução.

Observação

Este exemplo demonstra a funcionalidade da CLI do Azure DevOps com grupos de variáveis. Para aumentar a segurança, defina variáveis em grupos de variáveis na interface do usuário do Pipelines ou vincule um grupo de variáveis a segredos no Azure Key Vault.

Pré-requisitos

Salvar o arquivo YAML do pipeline

Salve a seguinte definição de pipeline YAML como um arquivo chamado azure-pipelines.yml no diretório raiz e main branch do repositório 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)

O script de exemplo

Esse exemplo executa as seguintes tarefas:

  • Criar os recursos de DevOps
  • Executar o pipeline
  • Modificar os valores das variáveis três vezes
  • Executar o pipeline novamente sempre que os valores das variáveis forem alterados

O script cria os seguintes recursos no Azure DevOps:

  • Um projeto em sua organização de DevOps
  • Uma conexão do serviço GitHub
  • Um pipeline
  • Um grupo de variáveis com duas variáveis não secretas e uma variável secreta

Antes de executar o script, substitua os seguintes espaços reservados da seguinte maneira:

  • <devops-organization> Nome de sua organização do Azure DevOps
  • <github-organization> Sua organização ou nome de usuário do GitHub
  • <github-repository> Seu nome do repositório GitHub
  • <pipelinename> Um nome para o pipeline que tem entre 3 e 19 caracteres e contém apenas numerais e letras minúsculas. O script adiciona um identificador exclusivo de cinco dígitos.

Salve seu GitHub PAT em seu ambiente local.

AZURE_DEVOPS_EXT_GITHUB_PAT=<your-github-pat>

Depois de armazenar o arquivo YAML no GitHub, execute o seguinte script da CLI do Azure DevOps em um shell de Bash no Cloud Shell ou localmente.

#!/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:"

Limpar os recursos

Para evitar incorrer em encargos para o projeto do Azure, você pode excluir o projeto de exemplo, que também exclui seu recurso.

Copie o id do projeto de exemplo da saída do seguinte comando:

az devops project list --org <your-organization>

Exclua o projeto executando o seguinte comando:

az devops project delete --id <project-id> --org <your-organization> --yes

Limpe seu ambiente local executando os seguintes comandos:

export AZURE_DEVOPS_EXT_GITHUB_PAT=""
az devops configure --defaults organization="" project=""

Referências da CLI do Azure

O exemplo neste artigo usa os seguintes comandos da CLI do Azure: