Bitbucket Pipelines:「Exceeded build time limit of 120 minutes」
ステップが最長の時間を超えたので、Bitbucket が止めました。最長は 120 分で、max-time に別の数を書いていれば、メッセージの 120 もその数になります。たいていは、どれか1つのコマンドが来ない何かを待っています。まずそれを見つけ、本当に長く要るステップだけ max-time を上げます。
上限
Atlassian の Step options と、このメッセージについての記事(Bitbucket pipeline is failing with Exceeded build time limit error)から:
max-timeの単位は分で、1〜720 の整数(720 は 12 時間)。書かなければ 120。optionsに書けば全部のステップに、ステップに書けばそのステップだけに効きます。ステップに書いた値が勝ちます。- Bitbucket Cloud でもセルフホストのランナーでも、範囲は同じです。
options:
max-time: 30
pipelines:
default:
- step:
name: Unit tests
script:
- npm test
- step:
name: Integration tests
max-time: 180
script:
- npm run test:integration
これで、結合テストのステップだけ3時間、ほかは全部 30 分で止まります。小さい上限にも使い道があります。すぐ終わるはずのステップが固まっても、2時間でなく数分で止まります。
自分では終わらないコマンド
- 誰も答えない質問。ステップにはキーボードが無いので、質問は時間切れまで待ち続けます。道具の非対話の形を使います:
apt-get install -y、tzdata のように地域を聞いてくるパッケージにはDEBIAN_FRONTEND=noninteractive。GIT_TERMINAL_PROMPT=0にすると、git はユーザー名を待たずにすぐ失敗します。 - 監視モードやサーバー。
npm start・vite・jest --watchなどは、誰かが止めるまで動き続けます。パイプラインでは、終わるほうのビルドやテストのコマンドを使います。Pipelines は全部のビルドでCI=trueを設定していて、Vitest や Create React App のテストのコマンドはそれを見て、監視せずに1回だけ走ります。 - テスト用のサーバーを前で起こしている:裏で起こし(
&)、応答するまで待ってから、テストを走らせます。 - 固まってはいないが遅い:ビルドから届かないネットワークの住所を待つテスト、キャッシュの無い大きなダウンロード。いつかは終わるか、それぞれに時間切れがあればそのメッセージで失敗します。
そのコマンドを見つける
Atlassian の記事は、コマンドの前後に時刻を出し、同じコマンドを手元でも動かして比べる方法を挙げています:
script: - date +"%T" - npm ci - date +"%T" - npm test - date +"%T"
上限まで待たずに早く落とすには、すぐ終わるはずのコマンドを timeout で包みます。timeout 10m npm test は 10 分で止めて終了コード 124 を返し(GNU coreutils。Ubuntu 系のイメージ)、固まったコマンドのログのところで、ステップがその場で失敗します。
「Step exceeded processing limits and has timed out」
同じく2時間で出る、原因の違うメッセージです。Atlassian の記事(Bitbucket pipeline build fails with error "Step exceeded processing limits")によると、そのビルドのワークスペース・リポジトリ・デプロイメントの変数の名前と値を全部つなげた長さが、12万文字(120,000)を超えてはいけません。超えると、コマンドの中身にかかわらず、ビルドが待ち行列に残ったままになるか、2時間後にこのメッセージで失敗します。
それぞれの段の変数の場所、デプロイメントの環境ごとに足すスクリプト、何を短くするか:「Step exceeded processing limits and has timed out」。
IntelliJ IDEA でパイプラインを見て、止める
Pipeline Inbox for Bitbucket Pipelines は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud の全部のリポジトリのパイプラインを IDE のツールウィンドウに並べ、ステップごとのコマンドと時間を見せます。動いているステップのログは Bitbucket が書くそばから IDE の中で伸びるので、どのコマンドがまだ動いているかが分かります。Pro なら、上限まで待たずに IDE から動いているパイプラインを止め、やり直せます。一覧・ステップ・ログは無料。実行・やり直し・停止は Pro(月 US$1.50・30日の無料試用つき)。
Atlassian・Bitbucket・Bitbucket Pipelines は Atlassian の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:push したのに Pipelines が動かない · 「Container 'Build' exceeded memory limit.」 · 「Container 'docker' exceeded memory limit.」 · キャッシュが効かない · 「unexpected system error」 · 「command not found」 · サブモジュールを取ってこない · 「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