パイプライン デコレーター式コンテキスト
Azure DevOps Services
パイプライン デコレーター は、実行されるパイプラインに関するコンテキストにアクセスできます。 パイプライン デコレーターの作成者は、このコンテキストを使用してデコレーターの動作に関する決定を行うことができます。 コンテキストで使用できる情報は、パイプラインとリリースで異なります。 また、デコレーターは、タスク名がタスクのグローバル一意識別子 (GUID) に解決された後に実行されます。 デコレーターがタスクを参照する場合は、名前やキーワードではなく GUID を使用する必要があります。
ヒント
Azure DevOps 拡張機能 SDK を使用した拡張機能開発に関する最新のドキュメントを確認してください。
リソース
パイプライン リソースは、 resources
オブジェクトで使用できます。
リポジトリ
現在、キーは 1 つだけです: repositories
。
repositories
は、リポジトリ ID からリポジトリに関する情報へのマップです。
デザイナー ビルドでは、プライマリ リポジトリのエイリアスが __designer_repo
されます。
YAML パイプラインでは、プライマリ リポジトリは self
と呼ばれます。
リリース パイプラインでは、リポジトリは使用できません。
リリース成果物変数 を使用できます。
たとえば、 self
リポジトリの名前を YAML パイプラインに出力するには、次のようにします。
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 があります。 デコレーターを実行する前に、タスク名とキーワードがタスク GUID にマップされます。 デコレーターが別のタスクの存在を確認する場合は、名前やキーワードではなくタスク GUID で検索する必要があります。
通常のタスク ( task
キーワードで指定) の場合は、タスクの task.json
を調べて、その GUID を確認できます。
前の例の checkout
や bash
などの特別なキーワードには、次の 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 |
タスク名とキーワードが解決されると、前の 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 サービスとエージェントに組み込まれています。