ツナ缶雑記

ぐうたらSEのブログです。主にマイクロソフト系技術を中心に扱います。

Azure Pipelines の Windows ビルドマシンで bash タスクを使う際の注意点

f:id:masatsuna:20200610003443p:plain

Azure Pipelines ではスクリプトを実行するためのツールとして、 Windows の CMD.exe や PowerShell など、いくつかのコマンドラインツールを利用することができます。 Windows だけではなく、 LinuxMacOS など、様々な OS 上で実行できるようなパイプラインを構築する場合、コマンドラインツールとして Bash を選択するケースがあるかと思います*1。 MS-Hosted のビルドマシンを使う分には、何も気にせず Bash を使えるのですが、 Windows OS のビルドマシンを自前で準備して使用する場合、ちょっとした注意が必要です。

よく見るエラーとその原因

自前のビルドマシンを構築して、以下のようなビルドパイプラインを実行してみましょう。

trigger: none

pool:
  name: '<Agent Pool の名前>'

steps:
- task: Bash@3
  inputs:
    targetType: 'inline'
    script: |
      echo 'Hello world'

このようなシンプルな Bash のタスクを実行すると、以下のようなエラーが出ることがあります。

##[error]Unable to locate executable file: 'bash'. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`

これ、単純に Bash へのパスが通っていないことが原因です。

最も簡単な解消方法

Bash が使えるようにパスを通せばよいのです。 WSL2*2 をインストールするのでもよいのですが、もっと簡単にやるなら、きっとインストールしているであろう Git for Windows にくっついてくる Bashエミュレーターを使う方法がお手軽です。

Git for Windows をインストールすると、何も変更しなければ以下の場所に Bashエミュレーターがインストールされます。

C:\Program Files\Git\bin\bash.exe

このパスを PATH 環境変数に追加してあげましょう。

f:id:masatsuna:20200610000657p:plain
環境変数に追加

環境変数への追加後、ビルドエージェントを再起動して、追加した PATH を再読み込みすることで、先ほどのエラーが解消するはずです。

*1:特にテンプレートとして切り出すような処理は、できる限り環境依存させたくないですよね。

*2:Windows Subsystem for Linux 2