Hantera variabler i variabelgrupper med Azure DevOps CLI

Azure DevOps Services

Att hantera variabler i Azure Pipelines är avgörande för att upprätthålla flexibilitet och säkerhet i dina CI/CD-arbetsflöden. Den här guiden visar hur du använder Azure DevOps CLI för att skapa och hantera både hemliga och icke-sekretiska variabler i en Azure Pipelines-variabelgrupp. Genom att använda variabelgrupper kan du centralisera hanteringen av variabler och se till att känslig information hanteras på ett säkert sätt.

Med exemplet i den här guiden lär du dig att:

  • Definiera en Azure Pipelines-pipeline med hjälp av en YAML-fil som lagras i GitHub.
  • Skapa en variabelgrupp som innehåller både hemliga och icke-sekretiska variabler.
  • Kör pipelinen med hjälp av Azure DevOps CLI och övervaka körningens bearbetning och utdata.

Kommentar

Det här exemplet demonstrerar funktionerna i Azure DevOps CLI med variabelgrupper. För ökad säkerhet definierar du variabler i variabelgrupper i pipelinegränssnittet eller länkar en variabelgrupp till hemligheter i Azure Key Vault.

Förutsättningar

Spara YAML-pipelinefil

Spara följande YAML-pipelinedefinition som en fil med namnet azure-pipelines.yml i rotkatalogen och main grenen av din GitHub-lagringsplats.

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)

Exempelskriptet

Det här exemplet utför följande uppgifter:

  • Skapa DevOps-resurserna
  • Köra pipelinen
  • Ändra variabelvärdena tre gånger
  • Kör pipelinen igen varje gång variabelvärdena ändras

Skriptet skapar följande resurser i Azure DevOps:

  • Ett projekt i din DevOps-organisation
  • En GitHub-tjänstanslutning
  • En pipeline
  • En variabelgrupp med två icke-sekretiska variabler och en hemlig variabel

Innan du kör skriptet ersätter du följande platshållare på följande sätt:

  • <devops-organization> Ditt Azure DevOps-organisationsnamn
  • <github-organization> Din GitHub-organisation eller ditt användarnamn
  • <github-repository> Ditt GitHub-lagringsplatsnamn
  • <pipelinename> Ett namn på pipelinen som är mellan 3 och 19 tecken och som endast innehåller siffror och gemener. Skriptet lägger till en femsiffrig unik identifierare.

Spara din GitHub PAT i din lokala miljö.

AZURE_DEVOPS_EXT_GITHUB_PAT=<your-github-pat>

När du har lagrat YAML-filen i GitHub kör du följande Azure DevOps CLI-skript i ett Bash-gränssnitt i Cloud Shell eller lokalt.

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

Rensa resurser

Om du vill undvika att debiteras för Azure-projektet kan du ta bort exempelprojektet, som också tar bort dess resurs.

id Kopiera exempelprojektet från utdata från följande kommando:

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

Ta bort projektet genom att köra följande kommando:

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

Rensa din lokala miljö genom att köra följande kommandon:

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

Azure CLI-referenser

Exemplet i den här artikeln använder följande Azure CLI-kommandon: