Gérer des variables dans des groupes de variables avec l'interface de programmation Azure DevOps CLI

Azure DevOps Services

La gestion des variables dans Azure Pipelines est cruciale pour maintenir la flexibilité et la sécurité dans vos workflows CI/CD. Ce guide montre comment utiliser l'Azure DevOps CLI pour créer et gérer des variables secrètes et non secrètes au sein d'un groupe de variables Azure Pipelines. En utilisant des groupes de variables, vous pouvez centraliser la gestion des variables et vous assurer que les informations sensibles sont traitées en toute sécurité.

Avec l'exemple de ce guide, vous apprendrez à :

  • Définir un pipeline Azure Pipelines à l'aide d'un fichier YAML stocké dans GitHub.
  • Créer un groupe de variables contenant des variables secrètes et non secrètes.
  • Exécuter le pipeline à l'aide de la CLI Azure DevOps et surveiller le traitement de l'exécution et les résultats.

Remarque

Cet exemple illustre les fonctionnalités d’Azure DevOps CLI avec des groupes de variables. Pour une sécurité accrue, définissez des variables dans des groupes de variables dans l'interface utilisateur Pipelines ou liez un groupe de variables à des secrets dans Azure Key Vault.

Prérequis

Enregistrer le fichier YAML du pipeline

Enregistrez la définition de pipeline YAML suivante dans un fichier appelé azure-pipelines.ymldans le répertoire racine et la branche main de votre référentiel 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)

L'exemple de script

Cet exemple effectue les tâches suivantes :

  • Créer les ressources DevOps.
  • Exécuter le pipeline
  • Modifier les valeurs des variables trois fois
  • Exécuter à nouveau le pipeline à chaque fois que les valeurs des variables sont modifiées.

Le script crée les ressources suivantes dans Azure DevOps :

  • Un projet dans votre organisation DevOps
  • Une connexion au service GitHub
  • Pipeline
  • Un groupe de variables avec deux variables non secrètes et une variable secrète.

Avant d'exécuter le script, remplacez les espaces réservés suivants comme suit :

  • <devops-organization> Nom de votre organisation Azure DevOps
  • <github-organization> Votre organisation GitHub ou votre nom d'utilisateur
  • <github-repository> Le nom de votre référentiel GitHub
  • <pipelinename> Nom du pipeline compris entre 3 et 19 caractères et contenant uniquement des chiffres et des lettres minuscules. Le script ajoute un identifiant unique à cinq chiffres.

Enregistrez votre PAT GitHub dans votre environnement local.

AZURE_DEVOPS_EXT_GITHUB_PAT=<your-github-pat>

Après avoir enregistré le fichier YAML dans GitHub, exécutez le script Azure DevOps CLI suivant dans un interpréteur de commande Bash dans Cloud Shell ou en local.

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

Nettoyer les ressources

Pour éviter d'encourir des frais pour le projet Azure, vous pouvez supprimer le projet d'exemple, ce qui supprime également sa ressource.

Copiez le id de l'exemple de projet à partir de la sortie de la commande suivante :

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

Supprimez le projet en exécutant la commande suivante :

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

Nettoyez votre environnement local en exécutant les commandes suivantes :

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

Références Azure CLI

L'exemple présenté dans cet article utilise les commandes Azure CLI suivantes :