Udostępnij za pośrednictwem


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

Azure DevOps Services

Zarządzanie zmiennymi w usłudze Azure Pipelines ma kluczowe znaczenie dla utrzymania elastyczności i bezpieczeństwa w przepływach pracy ciągłej integracji/ciągłego wdrażania. W tym przewodniku pokazano, jak używać interfejsu wiersza polecenia usługi Azure DevOps do tworzenia zmiennych wpisów tajnych i niezabezpieczonych oraz zarządzania nimi w grupie zmiennych usługi Azure Pipelines. Korzystając z grup zmiennych, można centralizować zarządzanie zmiennymi i zapewnić bezpieczne obsługę poufnych informacji.

Z przykładu w tym przewodniku dowiesz się, jak wykonywać następujące działania:

  • Zdefiniuj potok usługi Azure Pipelines przy użyciu pliku YAML przechowywanego w usłudze GitHub.
  • Utwórz grupę zmiennych zawierającą zarówno zmienne tajne, jak i niesekret.
  • Wykonaj potok przy użyciu interfejsu wiersza polecenia usługi Azure DevOps i monitoruj przetwarzanie i dane wyjściowe przebiegu.

Uwaga

Ten przykład demostuje 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 wpisami 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
  - 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)

Przykładowy skrypt

Ten przykład wykonuje następujące zadania:

  • Tworzenie zasobów metodyki DevOps
  • Uruchamianie potoku
  • Modyfikowanie wartości zmiennych trzy razy
  • Ponownie uruchom potok za każdym razem, gdy wartości zmiennych są zmieniane

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
  • <github-organization> Twoja organizacja lub nazwa użytkownika usługi GitHub
  • <github-repository> Nazwa repozytorium GitHub
  • <pipelinename> Nazwa potoku, który zawiera od 3 do 19 znaków i zawiera tylko cyfry i małe litery. Skrypt dodaje pięciocyfrowy unikatowy identyfikator.

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

AZURE_DEVOPS_EXT_GITHUB_PAT=<your-github-pat>

Po przechowywaniu pliku YAML w usłudze GitHub uruchom następujący skrypt interfejsu wiersza polecenia usługi Azure DevOps w powłoce powłoki Bash w usłudze Cloud Shell lub lokalnie.

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

Czyszczenie zasobów

Aby uniknąć naliczania opłat za projekt platformy Azure, możesz usunąć przykładowy projekt, który również usuwa jego zasób.

Skopiuj przykładowy id projekt 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=""

Dokumentacja interfejsu wiersza polecenia platformy Azure

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