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

Serviços de DevOps do Azure

Gerenciar 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 dentro de um grupo de variáveis do Azure Pipelines. Usando grupos de variáveis, você pode centralizar o gerenciamento de variáveis e garantir que as informações confidenciais sejam tratadas com segurança.

Com o exemplo neste 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 a execução, o processamento e a saída.

Nota

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 Cofre de Chaves do Azure.

Pré-requisitos

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

Salvar 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 na ramificação 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

Este exemplo executa as seguintes tarefas:

  • Criar os recursos de DevOps
  • Executar o pipeline
  • Modificar os valores das variáveis três vezes
  • Execute 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 de serviço GitHub
  • Um gasoduto
  • 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> O nome da sua organização do Azure DevOps
  • <github-organization> Sua organização ou nome de usuário do GitHub
  • <github-repository> O nome do repositório GitHub
  • <pipelinename> Um nome para o pipeline que está entre 3 e 19 caracteres e contém apenas algarismos e letras minúsculas. O script adiciona um identificador exclusivo de cinco dígitos.

Salve sua PAT do GitHub 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 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:"

Clean up resources (Limpar 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: