Udostępnij przez


Zarządzanie zmiennymi w grupach zmiennych za pomocą interfejsu wiersza polecenia usługi Azure DevOps

Azure DevOps Services | Azure DevOps Server

Zarządzanie zmiennymi w Azure Pipelines jest kluczowe dla zachowania elastyczności i bezpieczeństwa w procesach CI/CD. W tym artykule pokazano, jak używać interfejsu wiersza poleceń usługi Azure DevOps (CLI) do tworzenia i zarządzania zarówno zmiennymi tajnymi, jak i jawnymi w grupie zmiennych Azure Pipelines. Korzystając z grup zmiennych, można centralizować zarządzanie zmiennymi i zapewnić bezpieczne obsługę poufnych informacji.

Korzystając z przykładu w tym artykule, dowiesz się, jak wykonywać następujące działania:

  • Zdefiniuj rurociąg Azure Pipelines za pomocą pliku YAML przechowywanego w GitHub.
  • Utwórz grupę zmiennych zawierającą zarówno zmienne tajne, jak i niesekret.
  • Uruchom potok za pomocą interfejsu wiersza polecenia Azure DevOps i monitoruj przebieg oraz jego wyniki.

Uwaga

W tym przykładzie przedstawiono funkcjonalność interfejsu wiersza polecenia usługi Azure DevOps z grupami zmiennych. Aby zwiększyć bezpieczeństwo, zdefiniuj zmienne w grupach zmiennych w interfejsie użytkownika potoków lub połącz grupę zmiennych z tajnymi w usłudze Azure Key Vault.

Wymagania wstępne

Zapisywanie pliku YAML potoku

Zapisz następującą definicję potoku YAML jako plik o nazwie azure-pipelines.yml w katalogu głównym i main gałęzi repozytorium GitHub.

parameters:
- name: image
  displayName: 'Pool image'
  default: ubuntu-latest
  values:
  - windows-latest
  - ubuntu-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)

Przykładowy skrypt

Ten przykładowy skrypt wykonuje następujące zadania:

  • Tworzy zasoby metodyki DevOps
  • Uruchamia potok danych
  • Modyfikuje wartości zmiennych trzy razy
  • Uruchamia potok ponownie za każdym razem, gdy zmieniają się wartości zmiennych

Skrypt tworzy następujące zasoby w usłudze Azure DevOps:

  • Projekt w organizacji DevOps
  • Połączenie usługi GitHub
  • Potok
  • Grupa zmiennych z dwiema zmiennymi niesekretowymi i jedną zmienną wpisu tajnego

Przed uruchomieniem skryptu zastąp następujące symbole zastępcze:

  • <devops-organization> Nazwa organizacji usługi Azure DevOps. Jeśli na przykład adres URL usługi Azure DevOps to https://dev.azure.com/Contoso, użyj polecenia Contoso.
  • <github-organization> Twoja organizacja lub nazwa użytkownika usługi GitHub. Na przykład: myusername lub myorganization.
  • <github-repository> Nazwa repozytorium GitHub. Jeśli na przykład adres URL repozytorium to https://github.com/myusername/my-repo, użyj polecenia my-repo.
  • <pipelinename> Nazwa przepływu, która ma od 3 do 19 znaków i zawiera wyłącznie cyfry oraz małe litery. Skrypt dodaje pięciocyfrowy unikatowy identyfikator. Na przykład mypipeline.

Zapisz identyfikator PAT usługi GitHub w środowisku lokalnym.

AZURE_DEVOPS_EXT_GITHUB_PAT=<your-github-pat>

Po zapisaniu pliku YAML w usłudze GitHub uruchom następujący skrypt CLI Azure DevOps w powłoce Bash w usłudze Azure Cloud Shell lub lokalnie.

Ważne

Upewnij się, że masz zainstalowaną najnowszą wersję interfejsu wiersza polecenia platformy Azure i rozszerzenie DevOps. Uruchom az upgrade i az extension add --name azure-devops przed wykonaniem tego skryptu.

#!/bin/bash

# ===== CONFIGURATION =====
# Replace the placeholder values with your own.
devopsOrg="https://dev.azure.com/<devops-organization>"
githubOrg="<github-organization>"
githubRepo="<github-repository>"
pipelineName="<pipeline-name>"
repoName="$githubOrg/$githubRepo"
repoType="github"
branch="main"

# Declare other variables.
uniqueId=$RANDOM
devopsProject="Contoso DevOps Project $uniqueId"
serviceConnectionName="Contoso Service Connection $uniqueId"
variableGroupName="Contoso Variable Group $uniqueId"

# ===== AUTHENTICATION =====
# Sign in to Azure CLI and follow the sign-in instructions, if necessary.
echo "Signing in to Azure CLI..."
az login

# Sign in to Azure DevOps with your Azure DevOps PAT, if necessary.
# Uncomment the following line if your Azure AD account doesn't have Azure DevOps access.
# echo "Signing in to Azure DevOps..."
# az devops login

# ===== PROJECT CREATION =====
# Create the Azure DevOps project and set defaults.
echo "Creating Azure DevOps project..."
projectId=$(az devops project create \
    --name "$devopsProject" \
    --organization "$devopsOrg" \
    --visibility private \
    --query id \
    --output tsv)
echo "Project created with ID: $projectId"

# Set default organization and project for subsequent commands.
az devops configure --defaults organization="$devopsOrg" project="$devopsProject"
pipelineRunUrlPrefix="$devopsOrg/$projectId/_build/results?buildId="

# ===== SERVICE CONNECTION =====
# Create GitHub service connection.
echo "Creating GitHub service connection..."
githubServiceEndpointId=$(az devops service-endpoint github create \
    --name "$serviceConnectionName" \
    --github-url "https://www.github.com/$repoName" \
    --query id \
    --output tsv)
echo "Service connection created with ID: $githubServiceEndpointId"

# ===== PIPELINE CREATION =====
# Create the pipeline from the YAML file.
echo "Creating 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 \
    --output tsv)
echo "Pipeline created with ID: $pipelineId"

# ===== VARIABLE GROUP =====
# Create a variable group with 2 non-secret variables and 1 secret variable.
echo "Creating variable group..."
variableGroupId=$(az pipelines variable-group create \
    --name "$variableGroupName" \
    --authorize true \
    --variables a=12 b=29 \
    --query id \
    --output tsv)
echo "Variable group created with ID: $variableGroupId"

# Add a secret variable to the group.
echo "Adding secret variable to the group..."
az pipelines variable-group variable create \
    --group-id $variableGroupId \
    --name contososecret \
    --secret true \
    --value 17

# ===== PIPELINE RUNS =====
# Run the pipeline for the first time.
echo "Running pipeline (1st run)..."
pipelineRunId1=$(az pipelines run \
    --id $pipelineId \
    --query id \
    --output tsv)
echo "Pipeline run 1 started with ID: $pipelineRunId1"
echo "Go to the pipeline run's web page to view the output results of the 'Test variable group variables' job."
echo "URL: ${pipelineRunUrlPrefix}${pipelineRunId1}"
read -p "Press Enter to change the value of variable 'a', then run again:"

# Change the value of one of the variable group's nonsecret variables.
echo "Updating variable 'a'..."
az pipelines variable-group variable update \
    --group-id $variableGroupId \
    --name a \
    --value 22

# Run the pipeline for the second time.
echo "Running pipeline (2nd run)..."
pipelineRunId2=$(az pipelines run \
    --id $pipelineId \
    --query id \
    --output tsv)
echo "Pipeline run 2 started with ID: $pipelineRunId2"
echo "URL: ${pipelineRunUrlPrefix}${pipelineRunId2}"
read -p "Press Enter to change the value of the secret variable, then run once more:"

# Change the value of the variable group's secret variable.
echo "Updating secret variable 'contososecret'..."
az pipelines variable-group variable update \
    --group-id $variableGroupId \
    --name contososecret \
    --value 35

# Run the pipeline for the third time.
echo "Running pipeline (3rd run)..."
pipelineRunId3=$(az pipelines run \
    --id $pipelineId \
    --query id \
    --output tsv)
echo "Pipeline run 3 started with ID: $pipelineRunId3"
echo "URL: ${pipelineRunUrlPrefix}${pipelineRunId3}"
read -p "Press Enter to continue:"

Czyszczenie zasobów

Aby uniknąć naliczania opłat za projekt platformy Azure, usuń przykładowy projekt. Ta akcja usuwa również jego zasób.

Skopiuj id przykładowego projektu z danych wyjściowych następującego polecenia:

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

Usuń projekt, uruchamiając następujące polecenie:

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

Wyczyść środowisko lokalne, uruchamiając następujące polecenia:

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

Odniesienia do Azure CLI

W przykładzie w tym artykule są używane następujące polecenia interfejsu wiersza polecenia platformy Azure: