クラシック リリース パイプラインで変数を使用する

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022

クラシック リリース パイプラインで変数を使用すると、パイプライン全体でデータを交換および転送するのに便利です。 各変数は文字列として格納され、その値はパイプラインの実行間で変更される可能性があります。

テンプレートの解析時にのみ使用できる ランタイム パラメーターとは異なり、クラシック リリース パイプラインの変数にはデプロイ プロセス全体でアクセスできます。

クラシック リリース パイプラインの各ステージでアプリケーションをデプロイするタスクを設定すると、変数が次の場合に役立ちます。

  • カスタマイズの簡略化: 一般的なデプロイ パイプラインを一度定義すれば、さまざまなステージに簡単に適応できます。 たとえば、変数を使用して Web デプロイの接続文字列を表し、必要に応じて各ステージの値を調整します。 これらの変数は カスタム変数と呼ばれます。

  • コンテキスト情報の活用: ステージ成果物、またはデプロイを実行しているエージェントなど、リリース コンテキストに関する詳細にアクセスします。 たとえば、スクリプトによっては、ダウンロード用のビルド場所や、一時ファイルを作成するためのエージェントの作業ディレクトリが必要になる場合があります。 これらの変数は 、既定の変数と呼ばれます。

Note

YAML パイプラインの詳細については、ユーザー定義変数定義済み変数に関するページを参照してください。

ヒント

この記事の後半でAI を使用してこのタスクに役立てる方法をご説明します。または、Azure DevOps MCP Server で AI サポートを有効にする方法を参照して作業を開始できます。

既定の変数

既定の変数は実行コンテキストに関する重要な情報を、実行中のタスクとスクリプトに提供します。 これらの変数を使用すると、 実行されているシステムリリースステージ、または エージェント に関する詳細にアクセスできます。

System.Debug を除き、既定の変数は読み取り専用であり、システムは自動的に値を設定します。

最も重要な変数のいくつかを次の表に示します。 完全な一覧を確認するには、「すべての変数の現在の値を表示する」を参照してください。

システム変数

変数名 説明
System.TeamFoundationServerUri Azure Pipelines のサービス接続の URL。 スクリプトまたはタスクでこの変数を使用して、Azure Pipelines REST API を呼び出します。

例: https://fabrikam.vsrm.visualstudio.com/
System.TeamFoundationCollectionUri Team Foundation コレクションまたは Azure Pipelines の URL。 スクリプトまたはタスクでこの変数を使用して、Build や Version コントロールなどの他のサービスで REST API を呼び出します。

例: https://dev.azure.com/fabrikam/
System.CollectionId このビルドまたはリリースが属するコレクションの ID。

例: 6c6f3423-1c84-4625-995a-f7f143a1e43d
System.DefinitionId 現在のリリースが属するリリース パイプラインの ID。

例: 1
System.TeamProject このビルドまたはリリースが属するプロジェクトの名前。

例: Fabrikam
System.TeamProjectId このビルドまたはリリースが属するプロジェクトの ID。

例: 79f5c12e-3337-4151-be41-a268d2c73344
System.ArtifactsDirectory リリースのデプロイ中にパイプラインが成果物をダウンロードするディレクトリ。 アーティファクトをエージェントにダウンロードする必要がある場合、パイプラインはデプロイの前にディレクトリをクリアします。 Agent.ReleaseDirectorySystem.DefaultWorkingDirectoryと同じです。

例: C:\agent\_work\r1\a
System.DefaultWorkingDirectory リリースのデプロイ中にパイプラインが成果物をダウンロードするディレクトリ。 アーティファクトをエージェントにダウンロードする必要がある場合、パイプラインはデプロイの前にディレクトリをクリアします。 Agent.ReleaseDirectorySystem.ArtifactsDirectoryと同じです。

例: C:\agent\_work\r1\a
System.WorkFolder このエージェントの作業ディレクトリ。パイプラインによってビルドまたはリリースごとにサブフォルダーが作成されます。 Agent.RootDirectoryAgent.WorkFolderと同じです。

例: C:\agent\_work
System.Debug これは、ユーザーが 設定できる唯一のシステム変数です。 この変数を true に設定して、エラー検出を支援するために デバッグ モードでリリースを実行 します。

例: true

リリース変数

変数名 説明
Release.AttemptNumber このステージでこのリリースが配置された回数。

例: 1
Release.DefinitionEnvironmentId 対応するリリース パイプラインのステージの ID。

例: 1
Release.DefinitionId 現在のリリースが属するリリース パイプラインの ID。

例: 1
Release.DefinitionName 現在のリリースが所属するリリース パイプラインの名前。

例: fabrikam-cd
Release.Deployment.RequestedFor 現在進行中の配置をトリガー (開始) した ID の表示名。

例: Mateo Escobedo
Release.Deployment.RequestedForEmail 現在進行中の配置をトリガー (開始) した ID のメール アドレス。

例: mateo@fabrikam.com
Release.Deployment.RequestedForId 現在進行中の配置をトリガー (開始) した ID。

例: 2f435d07-769f-4e46-849d-10d1ab9ba6ab
Release.DeploymentID 配置の ID。 ジョブごとに一意です。

例: 254
Release.DeployPhaseID 配置が実行されているフェーズの ID。

例: 127
Release.EnvironmentId 配置が現在進行中のリリース内のステージ インスタンスの ID。

例: 276
Release.EnvironmentName 配置が現在進行中のステージの名前。

例: Dev
Release.EnvironmentUri 配置が現在進行中のリリース内のステージ インスタンスの URI。

例: vstfs://ReleaseManagement/Environment/276
Release.Environments.{stage-name}.status ステージの配置の状態。

例: InProgress
Release.PrimaryArtifactSourceAlias プライマリ成果物ソースのエイリアス。

例: fabrikam\_web
Release.Reason 配置の理由。 サポートされる値は次のとおりです。
ContinuousIntegration - ビルド完了後、継続的デプロイでリリースが開始されました。
Manual - リリースが手動で開始されました。
None - デプロイの理由が指定されていません。
Schedule - リリースはスケジュールから開始されました。
Release.ReleaseDescription リリース時に指定されたテキストの説明。

例: Critical security patch
Release.ReleaseId 現在のリリース レコードの識別子。

例: 118
Release.ReleaseName 現在のリリースの名前。

例: Release-47
Release.ReleaseUri 現在のリリースの URI。

例: vstfs://ReleaseManagement/Release/118
Release.ReleaseWebURL このリリースの URL。

例: https://dev.azure.com/fabrikam/f3325c6c/_release?releaseId=392&_a=release-summary
Release.RequestedFor リリースをトリガーした ID の表示名。

例: Mateo Escobedo
Release.RequestedForEmail リリースをトリガーした ID のメール アドレス。

例: mateo@fabrikam.com
Release.RequestedForId リリースをトリガーした ID の ID。

例: 2f435d07-769f-4e46-849d-10d1ab9ba6ab
Release.SkipArtifactsDownload エージェントへの成果物のダウンロードをスキップするかどうかを指定するブール値。

例: FALSE
Release.TriggeringArtifact.Alias リリースをトリガーした成果物の別名。 リリースが手動でスケジュールまたはトリガーされた場合、この値は空です。

例: fabrikam\_app

リリースステージ変数

変数名 説明
Release.Environments.{ステージ名}.ステータス 指定したステージ内での、このリリースの配置の状態。

例: NotStarted

エージェント変数

変数名 説明
Agent.Name エージェント プールに登録されているエージェントの名前。 この名前は、コンピューター名とは異なる可能性があります。

例: fabrikam-agent
Agent.MachineName エージェントが構成されているコンピューターの名前。

例: fabrikam-agent
Agent.Version エージェント ソフトウェアのバージョン。

例: 2.109.1
Agent.JobName リリースやビルドなど、実行するジョブの名前。

例: Release
Agent.HomeDirectory エージェントがインストールされているフォルダー。 このフォルダーには、エージェントのコードとリソースが含まれています。

例: C:\agent
Agent.ReleaseDirectory リリースのデプロイが成果物をダウンロードするディレクトリ。 成果物をエージェントにダウンロードする必要がある場合は、すべての配置の前にディレクトリがクリアされます。 これは、 System.ArtifactsDirectorySystem.DefaultWorkingDirectoryと同じです。

例: C:\agent\_work\r1\a
Agent.RootDirectory このエージェントの作業ディレクトリ。ビルドまたはリリースごとにサブフォルダーが作成されます。 これは、 Agent.WorkFolderSystem.WorkFolderと同じです。

例: C:\agent\_work
Agent.WorkFolder このエージェントの作業ディレクトリ。ビルドまたはリリースごとにサブフォルダーが作成されます。 これは、 Agent.RootDirectorySystem.WorkFolderと同じです。

例: C:\agent\_work
Agent.DeploymentGroupId エージェントが登録するデプロイ グループの ID。 この ID は、デプロイ グループ ジョブでのみ使用できます。

例: 1

成果物変数を解放する

リリースで参照する成果物ごとに、次の成果物変数を使用します。 すべての変数がすべての成果物の種類に適用されるわけではないことに注意してください。 次の表に、既定の成果物変数を示し、成果物の種類に基づく値の例を示します。 例が空の場合は、変数がその成果物の種類に適用できないことを示します。

{alias} プレースホルダーを 成果物ソースエイリアス のために指定した値に置き換えるか、リリース パイプラインのために生成された既定値に置き換えてください。

変数名 説明
Release.Artifacts.{別名}.DefinitionId ビルド パイプラインまたはリポジトリの識別子。例:

Azure Pipelines:1
Github: fabrikam/asp
Release.Artifacts.{別名}.DefinitionName ビルド パイプラインまたはリポジトリの名前。例:

Azure Pipelines:fabrikam-ci
TFVC: $/fabrikam
Git: fabrikam
Github: fabrikam/asp (main)
Release.Artifacts.{別名}.BuildNumber ビルド番号またはコミット識別子。例:

Azure Pipelines:20170112.1
ジェンキンス: 20170112.1
TFVC: Changeset 3
Git: 38629c964
Github: 38629c964
Release.Artifacts.{別名}.BuildId ビルド識別子。例:

Azure Pipelines:130
ジェンキンス: 130
Github: 38629c964d21fe405ef830b7d0220966b82c9e11
Release.Artifacts.{別名}.BuildURI ビルドの URL。例:

Azure Pipelines:vstfs://build-release/Build/130
Github: https://github.com/fabrikam/asp
Release.Artifacts.{別名}.SourceBranch ソースの構築元となったブランチの完全なパスと名前。例:

Azure Pipelines:refs/heads/main
Release.Artifacts.{別名}.SourceBranchName ソースの構築元となったブランチの名前のみ。例:

Azure Pipelines:main
Release.Artifacts.{別名}.SourceVersion ビルドされたコミット。例:

Azure Pipelines:bc0044458ba1d9298cdc649cb5dcf013180706f7
Release.Artifacts.{別名}.Repository.Provider ソースの構築元となったリポジトリの種類。例:

Azure Pipelines:Git
Release.Artifacts.{別名}.RequestedForID ビルドをトリガーしたアカウントの識別子。例:

Azure Pipelines:2f435d07-769f-4e46-849d-10d1ab9ba6ab
Release.Artifacts.{別名}.RequestedFor ビルドを要求したアカウントの名前。例:

Azure Pipelines:Mateo Escobedo
Release.Artifacts.{別名}.Type アーティファクトのソースの種類、例えばビルドなど。 例 :

Azure Pipelines:Build
ジェンキンス: Jenkins
Azure DevOps サービス:TFVC
Git: Git
Github: GitHub
Release.Artifacts.{別名}.PullRequest.TargetBranch pull request のターゲットとなるブランチの完全なパスと名前。 この変数は、リリースがプル リクエスト フローによってトリガーされた場合にのみ初期化されます。例:

Azure Pipelines:refs/heads/main
Release.Artifacts.{別名}.PullRequest.TargetBranchName pull request のターゲットとなるブランチの名前のみ。 この変数は、リリースがプル リクエスト フローによってトリガーされた場合にのみ初期化されます。例:

Azure Pipelines:main

主要な成果物変数

クラシック リリース パイプラインでは、複数の成果物を使用する場合は、1 つの成果物をプライマリ 成果物として指定できます。 その後、Azure Pipelines によって、指定されたプライマリ 成果物に対して次の変数が設定されます。

変数名 同等なもの
Build.DefinitionId Release.Artifacts.{プライマリ成果物の別名}.DefinitionId
Build.DefinitionName Release.Artifacts.{プライマリ成果物の別名}.DefinitionName
Build.BuildNumber Release.Artifacts.{プライマリ成果物の別名}.BuildNumber
Build.BuildId Release.Artifacts.{プライマリ成果物の別名}.BuildId
Build.BuildURI Release.Artifacts.{プライマリ成果物の別名}.BuildURI
Build.SourceBranch Release.Artifacts.{プライマリ成果物の別名}.SourceBranch
Build.SourceBranchName Release.Artifacts.{プライマリ成果物の別名}.SourceBranchName
Build.SourceVersion Release.Artifacts.{プライマリ成果物の別名}.SourceVersion
Build.Repository.Provider Release.Artifacts.{プライマリ成果物の別名}.Repository.Provider
Build.RequestedForID Release.Artifacts.{プライマリ成果物の別名}.RequestedForID
Build.RequestedFor Release.Artifacts.{プライマリ成果物の別名}.RequestedFor
Build.Type Release.Artifacts.{プライマリ成果物の別名}.Type
Build.PullRequest.TargetBranch Release.Artifacts.{プライマリ成果物の別名}.PullRequest.TargetBranch
Build.PullRequest.TargetBranchName Release.Artifacts.{プライマリ成果物の別名}.PullRequest.TargetBranchName

既定の変数の使用

既定の変数を使用する方法は 2 つあり、リリース パイプライン内のタスクのパラメーターとして使用するか、スクリプト内で使用することができます。

既定の変数をタスクへの入力として直接使用します。 たとえば、ASPNET4.CI をエイリアスとして持つ成果物の PowerShell タスクに引数としてRelease.Artifacts.{Artifact alias}.DefinitionNameを渡すには、$(Release.Artifacts.ASPNET4.CI.DefinitionName)を使用します。

既定の変数を引数として使用する方法を示すスクリーンショット。

スクリプトで既定の変数を使用するには、既定の変数名の ._に置き換えます。 たとえば、Release.Artifacts.{Artifact alias}.DefinitionName をエイリアスとして持つ成果物の の値を PowerShell スクリプトで印刷するには、$env:RELEASE_ARTIFACTS_ASPNET4_CI_DEFINITIONNAME を使用します。 元のエイリアス (ASPNET4.CI) は 、ASPNET4_CIに置き換えられます。

インライン PowerShell スクリプトで既定の変数を使用する方法を示すスクリーンショット。

カスタム変数

カスタム変数は、さまざまなスコープで定義できます。

  • 変数グループ: 変数グループを使用して、プロジェクト内のすべての定義で値を共有します。 この方法は、プロジェクト内の定義、ステージ、タスク全体で同じ値を使用し、それらを 1 つの場所から管理する場合に便利です。 変数グループを [パイプライン]>[ライブラリ] で定義および管理します。

  • リリース パイプライン変数: リリース パイプライン変数を使用して、リリース パイプライン内のすべてのステージで値を共有します。 このアプローチは、ステージとタスク間で一貫性のある値が必要なシナリオに最適で、1 つの場所から更新できます。 これらの変数は、リリース パイプラインの [変数] タブで定義および管理します。 変数を追加するときは、[パイプライン変数] ページで [範囲] ドロップダウン リストを [リリース] に設定します。

  • ステージ変数: ステージ変数を使用して、リリース パイプラインの特定のステージ内で値を共有します。 この方法は、ステージごとに異なるが、ステージ内のすべてのタスクで一貫性のある値に役立ちます。 これらの変数は、リリース パイプラインの [変数] タブで定義および管理します。 変数を追加するときは、[パイプライン変数] ページで [範囲] ドロップダウン リストを適切な環境に設定します。

プロジェクト、リリース パイプライン、ステージ レベルでカスタム変数を使用すると、次のことができます。

  • 値の重複を避けて、すべての出現箇所を 1 回の変更で簡単に更新できるようになります。

  • ユーザーが表示したり変更したりできないようにして、機密値をセキュリティで保護します。 変数をセキュリティで保護された (シークレット) としてマークするには、変数の横にある アイコンを選択します。

    重要

    非表示の変数 (シークレット) の値はサーバーに安全に格納され、ユーザーは保存後にそれらを表示できません。 デプロイ中、Azure Pipelines は、タスクがそれらの値を参照し、セキュリティで保護された HTTPS チャネル経由でエージェントに渡すときに、これらの値を復号化します。

Note

カスタム変数を作成すると、標準変数が上書きされる可能性があります。 たとえば、Windows エージェントでカスタム Path 変数を定義すると、 $env:Path 変数が上書きされ、PowerShell が正常に実行されない可能性があります。

カスタム変数の使用

タスクでカスタム変数を使用するには、変数名をかっこで囲み、その前に $ 文字を付けます。 たとえば、 adminUserName という名前の変数がある場合は、現在の値を $(adminUserName)としてタスクに挿入します。

Note

同じスコープ (ジョブやステージなど) でパイプラインにリンクされている異なるグループの変数が競合し、予期しない結果が生じる可能性があります。 この問題を回避するには、すべての変数グループの変数に一意の名前があることを確認します。

スクリプトで変数を定義および変更する

スクリプトから変数を定義または変更するには、task.setvariable ログ コマンドを使います。 更新された変数の値は、実行されているジョブに範囲が設定されます。そして、ジョブ間やステージ間では保持されません。 変数名は大文字に変換され、"." と " " が "_" に置き換えられます。

たとえば、Agent.WorkFolderAGENT_WORKFOLDERになります。

  • Windows では、この変数に %AGENT_WORKFOLDER% または $env:AGENT_WORKFOLDER としてアクセスします。
  • Linux と macOS では、$AGENT_WORKFOLDER を使用します。

ヒント

スクリプトは、次の場所で実行できます。

Batch スクリプト

sauce 変数と secret.Sauce 変数を設定する。

@echo ##vso[task.setvariable variable=sauce]crushed tomatoes
@echo ##vso[task.setvariable variable=secret.Sauce;issecret=true]crushed tomatoes with garlic

変数を読み取る

引数

"$(sauce)" "$(secret.Sauce)"

スクリプト

@echo off
set sauceArgument=%~1
set secretSauceArgument=%~2
@echo No problem reading %sauceArgument% or %SAUCE%
@echo But I cannot read %SECRET_SAUCE%
@echo But I can read %secretSauceArgument% (but the log is redacted so I do not spoil the secret)

変数の読み取りからのコンソール出力:

No problem reading crushed tomatoes or crushed tomatoes
But I cannot read 
But I can read ******** (but the log is redacted so I do not spoil the secret)

すべての変数の現在の値を表示する

  1. [パイプライン]>[リリース] を選択します。

  2. リリースの概要ビューを開き、関心のあるステージを選択します。 手順の一覧で、[ジョブの初期化] を選びます。

    ジョブの初期化の手順を示すスクリーンショット。

  3. この手順では、ログを開きます。 下にスクロールして、エージェントがこのジョブに使用する値を確認します。

    エージェントによって使用される変数を示すスクリーンショット。

デバッグ モードでリリースを実行する

デバッグ モードでリリースを実行すると、リリースの実行中に追加情報を表示することで、問題の診断と解決に役立ちます。 デバッグ モードは、リリース全体に対して有効にすることも、特定のリリース ステージのタスクに対して有効にすることもできます。

  • リリース全体のデバッグ モードを有効にするには、リリース パイプラインの [System.Debug] タブにtrue値を持つ という名前の変数を追加します。

  • 特定のステージのデバッグ モードを有効にするには、ステージのショートカット メニューから [ステージの構成] ダイアログを開き、[System.Debug] タブに値trueという名前の変数を追加します。

  • または、値 を持つ System.Debug という名前の変数を含むtrueを作成し、この変数グループをリリース パイプラインにリンクします。

ヒント

Azure Resource Manager サービス接続に関連するエラーが発生した場合は、「 方法: Azure Resource Manager サービス接続のトラブルシューティング 」を参照してください。

AI を使用してリリース変数を設計、検証、トラブルシューティングする

次の例では、変数のスコープと優先順位を理解し、保守可能な変数戦略を設計し、現在の使用状況を検証し、必要に応じ変数解決の問題をトラブルシューティングするのに役立つCopilot Chatを求めます。 これらのプロンプトをコピーしてCopilot Chatに貼り付け、プレースホルダーをステージ、タスク、変数名に置き換えます。

Task プロンプトの例
変数の優先順位について説明する Explain how variable precedence works in this Classic release pipeline across variable groups, release scope, and stage scope, using my variable names as examples.
変数戦略を設計する Propose a naming and scoping convention for Classic release variables in this pipeline so values are clear, reusable, and less likely to conflict.
スコープの重複を診断する In my Classic release pipeline, explain scope overlap for variable <VariableName> and tell me which value wins between release scope and stage scope.
スクリプト変数のマッピングを検証する Convert these Classic release variable references to the correct script environment variable names and explain why each one works.
変数グループの競合の監査 Identify potential naming conflicts across linked variable groups and stage variables in this Classic release pipeline, and recommend safer names.
変数が見つからない場合のトラブルシューティング Help me troubleshoot this Classic release pipeline error: variable not found for <VariableName>. Check macro syntax, scope, and task context.
"varialbe not found" の入力ミスのシナリオのトラブルシューティング I see a "varialbe not found" error in a deployment script. Help me determine whether this is a misspelled variable name, wrong scope, or incorrect environment variable mapping.

Copilot では AI を利用しているため、想定外のことや間違いが起こる可能性があります。 詳細については、「Copilot一般的な使用に関する FAQを参照してください。