Azure Pipelines:「Unable to locate executable file: 'pwsh'」
タスクは pwsh・bash・powershell・az のようなツールを動かす前に、エージェントの PATH にあるフォルダーからそのファイルを探します。どこにもなければ、このメッセージで止まります(どのタスクも使うタスク ライブラリのメッセージです)。引用符の中が探したファイルの名前で、直すには、そのファイルをエージェントに置くか、あるファイルを求めるように変えます(このメッセージの Stack Overflow の質問は、合わせて26万回以上見られています)。
失敗しているステップがプルリクエストのビルド検証の一部なら、プルリクエストはそれを待っています:JetBrains IDE のプラグイン Azure DevOps Pull Requests は、プルリクエストのブランチ ポリシーを状態つきで IDE に並べ、Pro ならエージェントが直ったあとに、失敗したビルド ポリシーをもう一度動かせます。JetBrains Marketplace で入れる
どう見えるか
##[error]Unable to locate executable file: 'pwsh'. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable.Linux と macOS では、続けてファイルが実行できるかを確かめるように、Windows では実行ファイルの拡張子があるかを確かめるように言います。- 名前はタスクで変わります。PowerShell 7(
pwsh: trueやscriptType: pscore)ならpwsh、Windows PowerShell ならpowershell、Bash のタスクならbash、Azure CLI のタスクならazです。
Linux のエージェントで 'powershell'
- Windows PowerShell(
powershell)は Windows にしかありません。ubuntu-latestなどの Linux のエージェントで、scriptType: psのAzureCLI@2はそれを求めて失敗します。 scriptType: pscore(PowerShell 7)かscriptType: bashにします。タスク自身のヘルプも同じで、Linux では Shell か PowerShell Core、Windows では Batch・PowerShell・PowerShell Core です(これについての質問で一番票を集めた回答)。
セルフホストのエージェントにツールが入っていない
- Microsoft がホストするイメージには PowerShell 7・bash・Azure CLI が入っています。セルフホストのエージェントにあるのは、誰かがそのマシンに入れたものだけです。Linux で
'pwsh'なら、Microsoft のパッケージ リポジトリから PowerShell を入れます(一番読まれている質問への回答)。Windows で'az'なら、実行のたびではなく一度だけ、エージェントのマシンに MSI で Azure CLI を入れます。 - Windows のエージェントで
'bash':Bash のタスクにはPATHの上のbash.exeが要り、たいていは Git for Windows のものです。スクリプトが実は PowerShell なら、PowerShell のタスクを使います(別の回答)。 - 入れたあとはエージェントかそのサービスを再起動して、新しい
PATHで始まるようにします。 - 同じジョブのステップで入れたツールは、ディスクにはあっても、次のステップの
PATHには入っていません。スクリプトのステップから##vso[task.prependpath]C:\Program Files\Microsoft SDKs\Azure\CLI2\wbin(フォルダーは自分のもの)を出力すると、後のステップのPATHの先頭にそのフォルダーが入ります(Microsoft のログ コマンドのページ)。
path という名前のパイプライン変数
- シークレットでない変数は、名前を大文字にした環境変数としてもステップに渡されます(変数についての Microsoft のページ)。ビルドのファイルやフォルダーのつもりで
pathという変数を作ると、それがPATHになり、エージェントのものを置き換えます。そうなると、入っているのが明らかなツールでも見つかりません。 - 名前を変えます。たとえば
projectPathです('bash'の質問への回答は、こうして直しています)。
エージェントのサービスがあなたの PATH を見ていない
- サービスとして動くエージェントは、サービスを動かすアカウントで動き、Windows ではシステムの
PATHとそのアカウントのPATHを使います。自分のユーザーにだけ入れたツールや、シェルのプロファイルでだけPATHに足したフォルダーは、そこにありません。すべてのユーザーに入れるか、システムのPATHに足して、サービスを再起動します。 - エージェントに何が見えているかは、それを出すステップで確かめます。Linux と macOS は
- script: echo $PATH、Windows は- powershell: $env:PATHです。ツールのあるフォルダーと見比べます。
IntelliJ IDEA と Rider で 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・PowerShell は Microsoft Corporation の商標、IntelliJ IDEA と Rider は JetBrains s.r.o. の商標です。このページはそのいずれとも提携しておらず、承認も受けていません。
ほかに:要求を満たすエージェントがない · チェックアウトが Git fetch failed with exit code: 128 で止まる · dotnet のタスクがプロジェクトを見つけられない · English