Share via


Variabelen in variabelegroepen beheren met de Azure DevOps CLI

Azure DevOps Services

Het beheren van variabelen in Azure Pipelines is van cruciaal belang voor het behouden van flexibiliteit en beveiliging in uw CI/CD-werkstromen. In deze handleiding ziet u hoe u de Azure DevOps CLI gebruikt om zowel geheime als niet-geheime variabelen te maken en te beheren binnen een Azure Pipelines-variabelegroep. Met behulp van variabelegroepen kunt u het beheer van variabelen centraliseren en ervoor zorgen dat gevoelige informatie veilig wordt verwerkt.

Met het voorbeeld in deze handleiding leert u het volgende:

  • Definieer een Azure Pipelines-pijplijn met behulp van een YAML-bestand dat is opgeslagen in GitHub.
  • Maak een variabelegroep die zowel geheime als niet-geheime variabelen bevat.
  • Voer de pijplijn uit met behulp van de Azure DevOps CLI en bewaak de verwerking en uitvoer van de uitvoering.

Notitie

In dit voorbeeld ziet u de functionaliteit van Azure DevOps CLI met variabele groepen. Voor betere beveiliging definieert u variabelen in variabelengroepen in de gebruikersinterface van pijplijnen of koppelt u een variabelegroep aan geheimen in Azure Key Vault.

Vereisten

YAML-bestand voor pijplijn opslaan

Sla de volgende YAML-pijplijndefinitie op als een bestand met de naam azure-pipelines.yml in de hoofdmap en main vertakking van uw GitHub-opslagplaats.

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)

Het voorbeeldscript

In dit voorbeeld worden de volgende taken uitgevoerd:

  • De DevOps-resources maken
  • De pijplijn uitvoeren
  • De variabelewaarden drie keer wijzigen
  • De pijplijn opnieuw uitvoeren telkens wanneer de variabele waarden worden gewijzigd

Met het script worden de volgende resources gemaakt in Azure DevOps:

  • Een project in uw DevOps-organisatie
  • Een GitHub-serviceverbinding
  • Een pijplijn
  • Een variabelegroep met twee niet-secret-variabelen en één geheime variabele

Voordat u het script uitvoert, vervangt u de volgende tijdelijke aanduidingen als volgt:

  • <devops-organization> De naam van uw Azure DevOps-organisatie
  • <github-organization> Uw GitHub-organisatie of gebruikersnaam
  • <github-repository> Naam van uw GitHub-opslagplaats
  • <pipelinename> Een naam voor de pijplijn tussen 3 en 19 tekens en bevat alleen cijfers en kleine letters. Met het script wordt een unieke id van vijf cijfers toegevoegd.

Sla uw GitHub PAT op in uw lokale omgeving.

AZURE_DEVOPS_EXT_GITHUB_PAT=<your-github-pat>

Nadat u het YAML-bestand in GitHub hebt opgeslagen, voert u het volgende Azure DevOps CLI-script uit in een Bash-shell in Cloud Shell of lokaal.

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

Resources opschonen

Als u kosten voor het Azure-project wilt voorkomen, kunt u het voorbeeldproject verwijderen, waardoor ook de resource wordt verwijderd.

Kopieer het id voorbeeldproject uit de uitvoer van de volgende opdracht:

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

Verwijder het project door de volgende opdracht uit te voeren:

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

Schoon uw lokale omgeving op door de volgende opdrachten uit te voeren:

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

Azure CLI-verwijzingen

In het voorbeeld in dit artikel worden de volgende Azure CLI-opdrachten gebruikt: