Bitbucket Pipelines:「There was an unexpected system error that may have left your step half-completed」
ステップのログの横に出るメッセージは、続けて「To solve this error, check your step progress and rerun it if you see fit.」と言います(ステップの進み具合を確かめ、よければやり直してください)。失敗したのは自分のコマンドではありません。ステップが動いていたコンテナが、ビルドの途中で消えました。Bitbucket にはステップがどこまで進んだかが分からないので、自分ではやり直しません。こちらが見て、やり直します。
コンテナが消えた理由
このメッセージについての Atlassian の記事(Pipeline build failed with "unexpected system error...")によると、いちばん多いのはセルフホストのランナーで、原因には次のようなものがあります:
- 停電
- 機械の故障
- ネットワークの切断
- ランナーのホストのメモリやディスクの不足
ステップ自身のメモリの上限を超えたときは、別のメッセージ「Container 'Build' exceeded memory limit.」で終わります。こちらは、その下の機械の話です。
ステップがどこまで進んだかを見る
Pipelines には、どのコマンドまで終わったかが分かりません。やり直す前に、ステップのログで最後に動いたコマンドを見ます。デプロイ・公開・データベースの移行をするステップは、半分だけ済んでいるかもしれません。やり直して安全なのは、どのコマンドも2回動かしてよいときだけです。そうでなければ、先に半分を手で済ませるか、元に戻します。
ランナーのホストを見る
Atlassian は、ビルドが動いている間にランナーのホストのメモリ・ディスク・ネットワークを見ること、ビルドのログに加えてランナーのログも読むことを勧めています。Linux のホストなら:
df -h # ディスクの残り free -m # メモリとスワップ journalctl -k | grep -i "out of memory" docker system df # Docker が使う容量
journalctl -k はカーネルのメッセージを出します。そこに「Out of memory: Killed process」があれば、Linux がメモリを空けるためにプロセスを止めています。Docker のランナーでは、古いイメージ・コンテナ・ビルドキャッシュがだんだんディスクを埋めます。docker system prune は、止まったコンテナ・使っていないネットワーク・名前の無いイメージ・使っていないビルドキャッシュを消します。見つけた原因を直してから、やり直します。何度も出て原因が分からないときは、パイプラインの URL とランナーのログを付けてサポートに問い合わせるよう、Atlassian は書いています。
失敗したステップだけをやり直す
Atlassian の View your pipeline から:失敗したパイプラインの Rerun には2つの選び方があります。
- Rerun failed steps は、失敗したステップだけを同じパイプラインの中でもう一度動かし、その回をログに足します。ログの Runs の選択で、回を切り替えられます。
- Rerun entire pipeline は、新しいパイプラインを始め、ログも別になります。
アーティファクトは14日間しか残らないので、アーティファクトを使うステップをやり直せるのはその間だけです。
IntelliJ IDEA で理由を見て、もう一度動かす
Pipeline Inbox for Bitbucket Pipelines は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud の全部のリポジトリのパイプラインを IDE のツールウィンドウに並べます。Bitbucket がエラーでステップを終え、その理由を返したときは、理由と、そのとき動いていたコマンドと、その最後の数行を見せるので、ステップがどこまで進んだかが分かります。Pro なら Run again で、同じパイプラインを同じコミットで IDE からもう一度動かせます(Rerun entire pipeline と同じく、新しいパイプラインになります)。一覧・ステップ・ログは無料。実行・やり直し・停止は Pro(月 US$1.50・30日の無料試用つき)。
Atlassian・Bitbucket・Bitbucket Pipelines は Atlassian の商標、Docker は Docker, Inc. の商標、Linux は Linus Torvalds の登録商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・Docker・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:キャッシュが効かない · push したのに Pipelines が動かない · 「Exceeded build time limit of 120 minutes」 · 「Container 'Build' exceeded memory limit.」 · 「Container 'docker' exceeded memory limit.」 · 「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