次の方法で共有


Azure DevOps CLI を使用して変数グループ内の変数を管理する

Azure DevOps Services

CI/CD ワークフローの柔軟性とセキュリティを維持するには、Azure Pipelines での変数の管理が不可欠です。 このガイドでは、Azure DevOps CLI を使用して、Azure Pipelines 変数グループ内でシークレット変数と非セキュリティ変数の両方を作成および管理する方法について説明します。 変数グループを使用すると、変数の管理を一元化して、機密情報を安全に処理できます。

このガイドのサンプルでは、以下のことを行う方法について説明します。

  • GitHub に格納されている YAML ファイルを使用して、Azure Pipelines パイプラインを定義する。
  • シークレット変数と非セキュリティ変数の両方を含む変数グループを作成する。
  • Azure DevOps CLI を使用してパイプラインを実行し、実行の処理と出力を監視する。

Note

このサンプルでは、変数グループを使用して Azure DevOps CLI の機能を示しています。 セキュリティを強化するには、Pipelines UI の変数グループで変数を定義するか、変数グループを Azure Key Vault のシークレットにリンクしてください。

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

パイプライン YAML ファイルを保存する

GitHub リポジトリのルート ディレクトリと main ブランチに、以下の YAML パイプライン定義を azure-pipelines.yml というファイルとして保存します。

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)

サンプル スクリプト

このサンプルでは、以下のタスクを実行します。

  • DevOps リソースを作成する
  • パイプラインを実行する
  • 変数の値を 3 回変更する
  • 変数値が変更されるたびにパイプラインを再実行する

このスクリプトは、Azure DevOps に以下のリソースを作成します。

  • DevOps 組織内のプロジェクト
  • GitHub サービス接続
  • パイプライン
  • 2 つの非シークレット変数と 1 つのシークレット変数を含む変数グループ

スクリプトを実行する前に、以下のようにプレースホルダーを置き換えてください。

  • <devops-organization> Azure DevOps 組織名
  • <github-organization> GitHub 組織名またはユーザー名
  • <github-repository> GitHub リポジトリ名
  • <pipelinename> パイプラインの名前 (3 ~ 19 文字の長さで、数字と小文字のみを使用)。 スクリプトにより、5 桁の一意識別子が追加されます。

GitHub PAT をローカル環境に保存します。

AZURE_DEVOPS_EXT_GITHUB_PAT=<your-github-pat>

YAML ファイルを GitHub に保存した後、Cloud Shell またはローカルの Bash シェルで、以下の Azure DevOps CLI スクリプトを実行します。

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

リソースをクリーンアップする

Azure プロジェクトの料金が発生しないように、サンプル プロジェクトを削除します。これにより、プロジェクトのリソースも削除されます。

以下のコマンドの出力から、サンプル プロジェクトの id をコピーします。

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

以下のコマンドを実行して、プロジェクトを削除します。

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

以下のコマンドを実行して、ローカル環境をクリーンアップします。

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

Azure CLI リファレンス

この記事のサンプルでは、以下の Azure CLI コマンドを使用しています。