Bitbucket Pipelines:「command not found」
ステップのログに aws: command not found のような行が出て、そのコマンドでステップが失敗します。シェルが $PATH のディレクトリを1つずつ見て、aws というプログラムを1つも見つけられなかったということです。Atlassian の記事(Pipelines build failed with "Command not found")は原因を2つ挙げていて、ステップの動き方からもう2つ出てきます。Alpine のようにシェルが bash でなく sh のイメージでは、行は not found になります。
1. PATH という名前の変数
ワークスペース・リポジトリ・デプロイメントの変数に PATH という名前のものがあると、ビルドの $PATH が置き換わり、シェルがコマンドを見つけられなくなります。たいていは全部です。変数の名前を、何に使うかが分かるもの(REMOTE_PATH・DEPLOY_PATH など)に変え、スクリプトでもその名前を使います。Atlassian の記事は、変数のページでこの名前に警告を出す要望として BCLOUD-20162 を挙げています。
2. 道具がイメージに無い
Bitbucket の機械と Linux Docker のランナーでは、ステップは Docker のコンテナの中で動き、そこにあるのはイメージに入っているプログラムだけです。bitbucket-pipelines.yml に image が無ければ、Bitbucket は atlassian/default-image:latest を使います。Atlassian はその5つの版を挙げていて(Use Docker images as build environments)、atlassian/default-image:5 は Ubuntu 24.04 に Git・Node.js 22・Python 3.12・Docker CLI です。slim や Alpine のイメージは、もっと多くを省いています。道具の入ったイメージを選ぶか、スクリプトで入れます:
pipelines:
default:
- step:
image: ubuntu:24.04
script:
- apt-get update
- apt-get install -y jq
- jq --version
Alpine なら apk add --no-cache jq です。Linux シェル・macOS・Windows のランナーにはコンテナが無く、ステップはランナーの機械の上で直接動くので、道具はその機械に入れます。
3. 別のステップで入れた
Atlassian の Step options から:ステップはそれぞれ別の Docker のコンテナで始まります。1つ目のステップで入れた道具は、2つ目にはありません。使うステップで入れるか、要るステップ全部で、道具の入ったイメージを使います。
4. PATH が見ない所に入った
- npm のパッケージについてくるコマンド(
eslint・tscなど)はnode_modules/.binにあり、そこは$PATHに入っていません。npx eslint .で動かすか、package.jsonのスクリプトにしてnpm runで動かします。 pip install --userはコマンドを~/.local/binに入れます。export PATH="$HOME/.local/bin:$PATH"でそのステップの残りに足すか、--userを付けずに入れます。
何かを変える前に確かめる
失敗するコマンドのすぐ前に次の行を入れて、もう一度動かします:
script: - echo "$PATH" - command -v aws || echo "no aws" - aws --version
$PATH が短いか変なら原因1。ふつうの $PATH で no aws なら、2・3・4 のどれかです。
IntelliJ IDEA で失敗したコマンドを見る
Pipeline Inbox for Bitbucket Pipelines は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud の全部のリポジトリのパイプラインを IDE のツールウィンドウに並べ、失敗したパイプラインでは、ステップが失敗したコマンドとその最後の数行を見せるので、ログを開かなくても「command not found」が目に入ります。プロジェクトに bitbucket-pipelines.yml があれば、エディタで開きます。PATH の変数の名前を変えただけなら、push する新しいコミットがありません。Pro なら Run again で、同じコミットを IDE からもう一度ビルドできます。一覧・ステップ・ログは無料。実行・やり直し・停止は Pro(月 US$1.50・30日の無料試用つき)。
Atlassian・Bitbucket・Bitbucket Pipelines は Atlassian の商標、Docker は Docker, Inc. の商標、Ubuntu は Canonical Ltd. の登録商標、Node.js は OpenJS Foundation の商標、Python は Python Software Foundation の登録商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページはそのいずれとも提携しておらず、承認も受けていません。
ほかに:「unexpected system error」 · キャッシュが効かない · push したのに Pipelines が動かない · 「Exceeded build time limit of 120 minutes」 · 「Container 'Build' exceeded memory limit.」 · 「Container 'docker' exceeded memory limit.」 · サブモジュールを取ってこない · 「We couldn't clone the repository」 · 「No online runner available」 · 「No space left on device」 · 「Step exceeded processing limits」 · 次のステップにアーティファクトが無い · 前は通ったビルドが今は落ちる · Build setup に時間がかかる · ビルド時間を使い切った · 「Permission denied to update branch」 · 「You have reached your pull rate limit」(Docker Hub) · 「There is an error in your bitbucket-pipelines.yml」 · 「This pipeline was paused」(デプロイ) · IntelliJ IDEA の Bitbucket Pipelines 用プラグインの比較 · English