Azure Pipelines:「A template expression is not allowed in this context」
テンプレート式 ${{ ... }} は、Azure Pipelines が YAML をコンパイルするとき、何かが動き出す前に一度だけ計算されます。展開されるのは YAML の一部だけで、それ以外のところに書くとパイプラインは始まらず、エディターか実行にファイル・行・列つきでこのエラー(ここではテンプレート式は使えない、という意味)が出ます。
そのパイプラインがプルリクエストのビルド検証なら、プルリクエストはそれを待っています:JetBrains IDE のプラグイン Azure DevOps Pull Requests は、プルリクエストのブランチ ポリシーを状態つきで IntelliJ IDEA・Rider・PyCharm に並べ、Pro なら YAML を直したあとに、失敗したビルド ポリシーをもう一度動かせます。JetBrains Marketplace で入れる
${{ }} が展開されるところ
- テンプレート式についての Microsoft のページでは、展開されるのはステージ・ジョブ・ステップ・コンテナーで、展開されない例として
triggerが挙げられています。 - Sprint 212 のリリース ノート(2022年)で、リポジトリとコンテナーのリソースでもテンプレート式が使えるようになりました。リポジトリのリソースについての Microsoft の YAML のリファレンスでは、
refにはパラメーターと定義済みのシステム変数が使え、YAML やパイプラインの設定で決めた変数は使えません。nameには変数を使えません。 - 使えるのは、パラメーターのようにコンパイルの時点で分かっている値だけです。パイプラインの設定・変数グループ・スクリプトで決まる変数は、その時点ではまだ分かりません。
トリガー
- Azure Repos のトリガーについての Microsoft のページには、変数はトリガーが動いたあとに評価されるので、トリガーには変数を使えないと書かれています。式も展開されません。
triggerとprには、ブランチとパスの名前をそのまま書きます。 - トリガーを書けるのはメインの YAML ファイルだけで、テンプレートには書けません。ブランチがパイプラインごとに違うなら、パイプラインごとに小さなメインのファイルを用意し、そこから共通のテンプレートを読み込みます。
- Azure Repos のプルリクエストなら、どのプルリクエストでパイプラインを動かすかは、ビルド検証のブランチ ポリシーが決めます。これは YAML の外で、ブランチごとに設定します。
パラメーターの既定値
- パラメーターの
defaultはただの値です。そこに書いた式は計算されないので、変数やほかのパラメーターで決まる既定値は、式が展開されるところに書きます。 - Microsoft のページにある形は、既定値を空にしておき、値を使うところで
coalesceを使うものです。
parameters:
- name: customVersion
type: string
default: ''
- name: defaultVersion
type: string
default: '1.0.0'
steps:
- script: echo Version is ${{ coalesce(parameters.customVersion, parameters.defaultVersion) }}
プールとコンテナーの名前
- パラメーターで選ぶプールは、式が展開されるステージやジョブの中なら使えます。ジョブの中に
pool: ${{ parameters.poolName }}と書きます。ランタイム パラメーターについての Microsoft のページには、実行する人がプールのイメージを選べる例があります。 - 変数グループの変数のように実行のときにしか分からない値は、タスクの入力ならマクロの書き方
$(name)、条件や変数ならランタイムの式$[ ]を使います。どちらも、トリガー・リソース・パイプラインの形には使えません。
IntelliJ IDEA・Rider・PyCharm で Azure DevOps のプルリクエスト
Azure DevOps Pull Requests は、JetBrains IDE 2024.1 以降と Android Studio で動く Lesstep のプラグインです。git のリモートから組織・プロジェクト・リポジトリを読み、あなたのレビュー待ちのプルリクエストを IDE のツール ウィンドウに並べます。Azure DevOps Services でも Azure DevOps Server でも動きます。プルリクエストのブランチ ポリシーを状態つきで見せるので、通っていない必須のビルドがプルリクエストの隣に出ます。Pro なら、失敗したビルド ポリシーや期限の切れたビルド ポリシーをそこからもう一度動かせます。レビューの受信箱は無料、投票・コメント・完了・作成は Pro(30日の無料試用つき)。
Azure DevOps と Azure Pipelines は Microsoft Corporation の商標、IntelliJ IDEA・Rider・PyCharm は JetBrains s.r.o. の商標です。このページはそのいずれとも提携しておらず、承認も受けていません。
ほかに:ビルド検証 · This pipeline needs permission to access a resource · English