変数グループの管理
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
この記事では、Azure Pipelines で変数グループを作成して使用する方法について説明します。 変数グループには、YAML パイプラインに渡したり、プロジェクト内の複数のパイプラインで使用できるようにしたりできる値とシークレットが格納されます。
変数グループ内のシークレット変数は、保護されたリソースです。 承認、チェック、パイプラインのアクセス許可の組み合わせを追加して、変数グループ内のシークレット変数へのアクセスを制限できます。 シークレットでない変数へのアクセスは、承認、チェック、パイプラインのアクセス許可によって制限されません。
変数グループは、ロールとパーミッションのライブラリ セキュリティ モデルに従います。
変数グループを作成する
プロジェクトでパイプライン実行の変数グループを作成できます。
Note
Azure Key Vault のシークレットを変数としてリンクするシークレット変数グループを作成するには、「Azure Key Vault からシークレットをリンクする」の手順に従います。
Azure Pipelines ユーザー インターフェイスで変数グループを作成できます。
前提条件
パイプラインを作成するアクセス許可と変数を持つ Azure DevOps 組織とプロジェクト。
変数グループの作成
Azure DevOps プロジェクト ページの左側のメニューで [パイプライン]>[ライブラリ] を選択します。
[ライブラリ] ページで、[+ 変数グループ] を選択します。
新しい変数グループ ページの [プロパティ] で、変数グループの名前と説明 (オプション) を入力します。
[変数] で [+ 追加] を選択し、グループに含める変数名と値を入力します。 値を暗号化して安全に格納する場合は、変数の横にあるロック アイコンを選択します。
[+ 追加] を選択して、新しい変数をそれぞれ追加します。 変数の追加が完了したら、[保存] を選択します。
これで、プロジェクト パイプラインでこの変数グループを使用できるようになりました。
Azure キー コンテナーのシークレットにリンクする
既存の Azure Key Vault にリンクする変数グループを作成し、選択した Key Vault シークレットを変数グループにマップできます。 シークレット名のみが変数グループにマップされ、シークレット値はマップされません。 変数グループへのリンクを持つパイプライン実行は、ボールトから最新のシークレット値をフェッチします。
キー コンテナー内の既存のシークレットに加えられた変更は、変数グループを使用するすべてのパイプラインで自動的に使用できます。 ただし、シークレットがボールトに追加されたり、ボールトから削除されたりしても、関連付けられている変数グループは自動的に更新されません。 変数グループに含めるシークレットを明示的に更新する必要があります。
Key Vault では暗号化キーと証明書の Azure への格納と管理がサポートされていますが、Azure Pipelines 変数グループ統合ではキー コンテナー シークレットのマッピングのみがサポートされます。 暗号化キーと証明書はサポートされていません。
Note
Azure ロールベースのアクセス制御 (Azure RBAC) を使用する Key Vault はサポートされていません。
前提条件
- シークレットを含む Azure Key Vault。 Azure portal を使用して Key Vault を作成することもできます。
- プロジェクトの Azure サービス接続。
変数グループの作成
- Azure DevOps プロジェクトで、[パイプライン]>[ライブラリ]>[+ 変数グループ] を選択します。
- [変数グループ] ページで、変数グループの名前と説明 (オプション) を入力します。
- [シークレットを Azure Key Vault から変数としてリンクする] トグルを有効にします。
- Azure サブスクリプション エンドポイントと Key Vault 名を選択します。
- コンテナー名の横にある [承認] を選択して、Azure DevOps が Key Vault にアクセスできるようにします。
- [シークレットの選択] 画面で、コンテナーからこの変数グループにマッピングする特定のシークレットを選択し、[OK] を選択します。
- [保存] を選択して、シークレット変数グループを保存します。
Note
Azure サービス接続には、キー コンテナーに対する少なくとも Get および List アクセス許可が必要です。このアクセス許可は、前の手順で承認できます。 次の手順に従って、Azure portal からこれらのアクセス許可を付与することもできます。
- Key Vault の [設定] を開き、アクセス構成]>[アクセス ポリシーに移動] を選択します。
- [アクセス ポリシー] ページで、Azure Pipelines プロジェクトが少なくとも Get および List アクセス許可を持つ [アプリケーション] の下に一覧表示されていない場合は、[作成] を選択します。
- [シークレットのアクセス許可] で、[Get] および [List] を選択し、[次へ] を選択します。
- サービス プリンシパルを選択し、[次へ] を選択します。
- [次へ] をもう一度選択して設定を確認してから、[作成] を選択します。
詳細については、「Azure Key Vault のシークレットを使用する」を参照してください。
変数グループを更新する
変数グループは、Azure Pipelines ユーザー インターフェイスを使用して更新できます。
- Azure DevOps プロジェクト ページの左側のメニューで [パイプライン]>[ライブラリ] を選択します。
- [ライブラリ] ページで、更新する変数グループを選択します。 変数グループの一覧にカーソルを合わせ、[その他のオプション] アイコンを選択し、メニューから [編集] を選択することもできます。
- 変数グループ ページで、プロパティのいずれかを変更し、[保存] を選択します。
変数グループを削除する
Azure Pipelines ユーザー インターフェイスで変数グループを削除できます。
- Azure DevOps プロジェクト ページの左側のメニューで [パイプライン]>[ライブラリ] を選択します。
- [ライブラリ] ページで、削除する変数グループにカーソルを合わせ、[その他のオプション] アイコンを選択します。
- メニューから [削除] を選択し、確認画面で [削除] を選択します。
変数グループ内の変数を管理します。
Azure Pipelines ユーザー インターフェイスを使用して、変数グループ内の変数を変更、追加、または削除できます。
- Azure DevOps プロジェクト ページの左側のメニューで [パイプライン]>[ライブラリ] を選択します。
- [ライブラリ] ページで、更新する変数グループを選択します。 変数グループの一覧にカーソルを合わせ、[その他のオプション] アイコンを選択し、メニューから [編集] を選択することもできます。
- 変数グループ ページでは、次のことができます。
- 変数名または値のいずれかを変更します。
- 変数名の横にあるごみ箱アイコンを選択して、変数を削除します。
- 変数の値の横にあるロック アイコンを選択して、変数をシークレットまたは非シークレットに変更します。
- [+ 追加] を選択して、新しい変数を追加します。
- 変更後、[保存] を選択します。
パイプラインで変数グループを使用する
変数グループは、YAML またはクラシック パイプラインで使用できます。 変数グループに加えた変更は、変数グループがリンクされているすべての定義またはステージで自動的に利用できるようになります。
YAML パイプラインで変数グループを使用する
YAML パイプラインに変数グループの使用を許可すると、パイプライン内で変数グループまたはその中の変数を使用できるようになります。
変数グループを使用するように YAML パイプラインを承認する
YAML パイプラインで変数グループにのみ名前を付けると、リポジトリにコードをプッシュできるユーザーは誰でも変数グループ内のシークレットの内容を抽出できるようになります。 したがって、YAML パイプラインで変数グループを使用するには、パイプラインがグループを使用するように承認する必要があります。 クラシック パイプラインでは、個別の承認なしで変数グループを使用できます。
Azure Pipelines ユーザー インターフェイスを使用して、パイプラインが変数グループを使用することを承認できます。
- Azure DevOps プロジェクト ページの左側のメニューで [パイプライン]>[ライブラリ] を選択します。
- [ライブラリ] ページで、承認する変数グループを選択します。
- 変数グループのページで、[パイプラインのアクセス許可] タブを選択します。
- [パイプラインのアクセス許可] 画面で、+ を選択してから、承認するパイプラインを選択します。 または、[その他の操作] アイコンを選択し、[アクセスを開く] を選択し、もう一度 [アクセスを開く] を選択して確認します。
パイプラインを選択すると、そのパイプラインが変数グループを使用することが許可されます。 別のパイプラインを承認するには、もう一度 + アイコンを選択します。 [アクセスを開く] を選択すると、変数グループを使用するすべてのプロジェクト パイプラインが承認されます。 グループ内に秘密がない場合は、[アクセスを開く] が適切なオプションとなる可能性があります。
変数グループを承認する別の方法は、パイプラインを選択し、[編集] を選択し、ビルドを手動でキューに入れることです。 リソース承認エラーが表示され、変数グループの承認されたユーザーとしてパイプラインを明示的に追加できます。
YAML パイプラインで変数グループを使用する
変数グループの変数を使用するには、YAML パイプライン ファイルにグループ名への参照を追加します。 その後、ファイル内の変数グループの変数を使用できます。
variables:
- group: my-variable-group
同じパイプライン内の複数の変数グループを参照できます。 複数の変数グループに同じ変数が含まれている場合は、ファイル内の変数を使用する最後の変数グループによって変数の値が設定されます。 変数の優先順位の詳細については、「変数の拡張」を参照してください。
テンプレート内の変数グループを参照することもできます。 次の variables.yml テンプレート ファイルは、変数グループ my-variable-group
を参照します。 変数グループには、myhello
という名前の変数が含まれています。
variables:
- group: my-variable-group
YAML パイプラインは、variables.yml テンプレートを参照し、変数グループ my-variable-group
から変数 $(myhello)
を使用します。
stages:
- stage: MyStage
variables:
- template: variables.yml
jobs:
- job: Test
steps:
- script: echo $(myhello)
YAML パイプラインで変数グループ変数を使用する
リンクされた変数グループ内の変数値には、パイプライン内で定義する変数にアクセスするのと同じ方法でアクセスします。 たとえば、パイプラインにリンクされた変数グループで customer
という名前の変数の値にアクセスするには、タスクパラメータまたはスクリプトで $(customer)
を使用できます。
パイプライン ファイルでスタンドアロン変数と変数グループの両方を使用する場合は、スタンドアロン変数の name
-value
構文を使用します。
variables:
- group: my-variable-group
- name: my-standalone-variable
value: 'my-standalone-variable-value'
変数グループ内の変数を参照するには、マクロ構文またはランタイム式を使用できます。 次の例では、グループ my-variable-group
に myhello
という名前の変数があります。
ランタイム式を使用するには:
variables:
- group: my-variable-group
- name: my-passed-variable
value: $[variables.myhello]
- script: echo $(my-passed-variable)
マクロ構文を使用するには:
variables:
- group: my-variable-group
steps:
- script: echo $(myhello)
暗号化された変数や Key Vault 変数などのシークレット変数にスクリプトで直接アクセスすることはできません。 これらの変数を引数としてタスクに渡す必要があります。 詳しくは、「シークレット変数」を参照してください。
クラシック パイプラインで変数グループを使用する
クラシック パイプラインでは、個別の承認なしで変数グループを使用できます。 変数グループを使用するには、以下の手順を使用します。
クラシック パイプラインを開きます。
[変数]>[変数グループ] を選択し、[変数グループのリンク] を選択します。
ビルド パイプラインに、使用可能なグループの一覧が表示されます。 変数グループをパイプラインにリンクします。 グループ内のすべての変数を、パイプライン内で使用できます。
リリース パイプラインでは、パイプライン内のステージのドロップダウン リストも表示されます。 変数グループをパイプライン自体、またはリリース パイプラインの 1 つ以上の特定のステージにリンクします。 1 つ以上のステージにリンクする場合、変数グループの変数はこれらのステージに限定され、リリースの他のステージではアクセスできなくなります。
複数のスコープ内で同じ名前の変数を設定する場合、次の優先順位が適用されます (最も高い優先順位が最初)。
- キュー時に設定された変数
- パイプラインで設定された変数
- 変数グループで設定された変数
変数の優先順位の詳細については、「変数の拡張」を参照してください。
Note
同じスコープ (たとえば、ジョブやステージ) のパイプラインにリンクされている異なるグループの変数が競合し、結果が予測できない場合があります。 すべての変数グループ間で、必ず、変数に対して異なる名前を使用してください。