パイプライン デコレーター式コンテキスト

Azure DevOps Services

パイプライン デコレーター は、実行されるパイプラインに関するコンテキストにアクセスできます。 パイプライン デコレーターの作成者は、このコンテキストを使用してデコレーターの動作に関する決定を行うことができます。 コンテキストで使用できる情報は、パイプラインとリリースで異なります。 また、デコレーターは、タスク名がタスクのグローバル一意識別子 (GUID) に解決された後に実行されます。 デコレーターがタスクを参照する場合は、名前またはキーワード (keyword)ではなく GUID を使用する必要があります。

ヒント

Azure DevOps 拡張機能 SDK を使用した拡張機能開発に関する最新のドキュメントを確認してください。

リソース

パイプライン リソースはオブジェクトで resources 使用できます。

リポジトリ

現在、キーは 1 つだけです repositoriesrepositories は、リポジトリ ID からリポジトリに関する情報へのマップです。

デザイナー ビルドでは、プライマリ リポジトリのエイリアスは __designer_repo. YAML パイプラインでは、プライマリ リポジトリが呼び出されます self。 リリース パイプラインでは、リポジトリは使用できません。 リリース成果物変数 を使用できます。

たとえば、YAML パイプラインでリポジトリの名前を self 出力するには、次のようにします。

steps:
- script: echo ${{ resources.repositories['self'].name }}

リポジトリには、次のプロパティが含まれています。

resources['repositories']['self'] =
{
	"alias": "self",
	"id": "<repo guid>",
	"type": "Git",
	"version": "<commit hash>",
	"name": "<repo name>",
	"project": "<project guid>",
	"defaultBranch": "<default ref of repo, like 'refs/heads/main'>",
	"ref": "<current pipeline ref, like 'refs/heads/topic'>",
	"versionInfo": {
		"author": "<author of tip commit>",
		"message": "<commit message of tip commit>"
	},
	"checkoutOptions": {}
}

ジョブ

ジョブの詳細はオブジェクトで job 使用できます。

データは次のようになります。

job = 
{
	"steps": [
		{
			"environment": null,
			"inputs": {
				"script": "echo hi"
			},
			"type": "Task",
			"task": {
				"id": "d9bafed4-0b18-4f58-968d-86655b4d2ce9",
				"name": "CmdLine",
				"version": "2.146.1"
			},
			"condition": null,
			"continueOnError": false,
			"timeoutInMinutes": 0,
			"id": "5c09f0b5-9bc3-401f-8cfb-09c716403f48",
			"name": "CmdLine",
			"displayName": "CmdLine",
			"enabled": true
		}
	]
}

たとえば、タスクがまだ存在しない場合にのみ、条件付きでタスクを追加するには、次のようにします。

- ${{ if not(containsValue(job.steps.*.task.id, 'f3ab91e7-bed6-436a-b651-399a66fe6c2a')) }}:
  - script: echo conditionally inserted

変数

パイプライン変数 も使用できます。

たとえば、パイプラインに変数が呼び出 myVarされた場合、その値はデコレーター variables['myVar']で使用できます。

たとえば、デコレーターにオプトアウトを与えるために、変数を探します。 デコレーターをオプトアウトするパイプライン作成者は、この変数を設定でき、デコレーターは挿入されません。 変数が存在しない場合、デコレーターは通常どおりに挿入されます。

my-decorator.yml

- ${{ if ne(variables['skipInjecting'], 'true') }}:
  - script: echo Injected the decorator

その後、組織内のパイプラインで、作成者はデコレーターに自身を挿入しないように要求できます。

pipeline-with-opt-out.yml

variables:
  skipInjecting: true
steps:
- script: echo This is the only step. No decorator is added.

タスク名と GUID

デコレーターは、タスクが既に GUID に変わった後に実行されます。 次の YAML について考えてみましょう。

steps:
- checkout: self
- bash: echo This is the Bash task
- task: PowerShell@2
  inputs:
    targetType: inline
    script: Write-Host This is the PowerShell task

これらの各ステップはタスクにマップされます。 各タスクには一意の GUID があります。 タスク名とキーワード (keyword)は、デコレーターを実行する前にタスク GUID にマップされます。 デコレーターが別のタスクの存在をチェックする場合は、名前やキーワード (keyword)ではなく、タスク GUID で検索する必要があります。

通常のタスク (キーワード (keyword)でtask指定) の場合は、タスクtask.jsonの GUID を確認できます。 前の例のようなcheckoutbash特殊なキーワード (keyword)の場合は、次の GUID を使用できます。

Keyword GUID タスク名
checkout 6D15AF64-176C-496D-B583-FD2AE21D4DF4 n/a、メモを参照してください
bash 6C731C3C-3C68-459A-A5C9-BDE6E6595B5B Bash
script D9BAFED4-0B18-4F58-968D-86655B4D2CE9 CmdLine
powershell E213FF0F-5D5C-4791-802D-52EA3E7BE1F1 PowerShell
pwsh E213FF0F-5D5C-4791-802D-52EA3E7BE1F1 PowerShell
publish ECDC45F6-832D-4AD9-B52B-EE49E94659BE PublishPipelineArtifact
download 30f35852-3f7e-4c0c-9a88-e127b4f97211 DownloadPipelineArtifact

タスク名とキーワード (keyword)が解決されると、前の YAML は次のようになります。

steps:
- task: 6D15AF64-176C-496D-B583-FD2AE21D4DF4@1
  inputs:
    repository: self
- task: 6C731C3C-3C68-459A-A5C9-BDE6E6595B5B@3
  inputs:
    targetType: inline
    script: echo This is the Bash task
- task: E213FF0F-5D5C-4791-802D-52EA3E7BE1F1@2
  inputs:
    targetType: inline
    script: Write-Host This is the PowerShell task

ヒント

これらの GUID はそれぞれ、 task.json 対応する インボックス タスクで確認できます。 唯一の例外は checkout、エージェントのネイティブ機能です。 その GUID は、Azure Pipelines サービスとエージェントに組み込まれています。