Gestire le variabili nei gruppi di variabili con l'interfaccia della riga di comando di Azure DevOps

Servizi di Azure DevOps

La gestione delle variabili in Azure Pipelines è fondamentale per mantenere la flessibilità e la sicurezza nei flussi di lavoro CI/CD. Questa guida illustra come usare l'interfaccia della riga di comando di Azure DevOps per creare e gestire variabili sia segrete che nonsecret all'interno di un gruppo di variabili di Azure Pipelines. Usando i gruppi di variabili, è possibile centralizzare la gestione delle variabili e assicurarsi che le informazioni riservate vengano gestite in modo sicuro.

Con l'esempio riportato in questa guida si apprenderà come:

  • Definire una pipeline di Azure Pipelines usando un file YAML archiviato in GitHub.
  • Creare un gruppo di variabili contenente variabili sia segrete che nonsecret.
  • Eseguire la pipeline usando l'interfaccia della riga di comando di Azure DevOps e monitorare l'elaborazione e l'output dell'esecuzione.

Nota

Questo esempio illustra la funzionalità dell'interfaccia della riga di comando di Azure DevOps con gruppi di variabili. Per una maggiore sicurezza, definire le variabili nei gruppi di variabili nell'interfaccia utente di Pipelines o collegare un gruppo di variabili ai segreti in Azure Key Vault.

Prerequisiti

Salvare il file YAML della pipeline

Salvare la definizione di pipeline YAML seguente come file denominato azure-pipelines.yml nella directory radice e main nel ramo del repository 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)

Script di esempio

Questo esempio esegue le attività seguenti:

  • Creare le risorse DevOps
  • Eseguire la pipeline
  • Modificare i valori delle variabili tre volte
  • Eseguire di nuovo la pipeline ogni volta che i valori delle variabili vengono modificati

Lo script crea le risorse seguenti in Azure DevOps:

  • Un progetto nell'organizzazione DevOps
  • Connessione al servizio GitHub
  • Una pipeline
  • Gruppo di variabili con due variabili nonsecret e una variabile segreta

Prima di eseguire lo script, sostituire i segnaposto seguenti nel modo seguente:

  • <devops-organization> Nome dell'organizzazione di Azure DevOps
  • <github-organization> Nome utente o organizzazione GitHub
  • <github-repository> Nome del repository GitHub
  • <pipelinename> Nome della pipeline compreso tra 3 e 19 caratteri e contiene solo numeri e lettere minuscole. Lo script aggiunge un identificatore univoco a cinque cifre.

Salvare il pat di GitHub nell'ambiente locale.

AZURE_DEVOPS_EXT_GITHUB_PAT=<your-github-pat>

Dopo aver archiviato il file YAML in GitHub, eseguire lo script dell'interfaccia della riga di comando di Azure DevOps seguente in una shell Bash in Cloud Shell o in locale.

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

Pulire le risorse

Per evitare addebiti per il progetto di Azure, è possibile eliminare il progetto di esempio, che elimina anche la relativa risorsa.

Copiare l'oggetto id del progetto di esempio dall'output del comando seguente:

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

Eliminare il progetto eseguendo il comando seguente:

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

Pulire l'ambiente locale eseguendo i comandi seguenti:

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

Riferimenti all'interfaccia della riga di comando di Azure

L'esempio in questo articolo usa i comandi seguenti dell'interfaccia della riga di comando di Azure: