Bitbucket Pipelines:新しい push で古いパイプラインを止める
ブランチやプルリクエストに2回 push すると、Bitbucket は2つのパイプラインを最後まで動かします。もう要らないほうのコミットにもビルド時間を使います。古いほうを止める設定は Bitbucket にありません。手で止めるか、Atlassian のサポートが勧めるように、新しいパイプラインから API で止めます。
自動のキャンセルは無い
Atlassian のサポートはコミュニティで「自動でそうする方法はありません」(2023年2月)、プルリクエストについても、動いているパイプラインを自動でキャンセルする仕組みは無い(2024年12月)と答えています。機能の要望は2つあり、どちらも Gathering Interest です:
- BCLOUD-23526「Ability to cancel running pipeline for a PR when a new commit is pushed」:37票、2024年12月から。
- BCLOUD-22726「Cancel previous builds when a new one starts - Self-hosted runners」:70票、2023年6月から。
atlassian/trigger-pipeline のパイプで始めたパイプラインも、始めた側を止めても止まりません(BCLOUD-23527)。
パイプラインを止める
Bitbucket では、動いているパイプラインのページから止めます。REST API では Stop a pipeline:
curl -X POST -u '<メールアドレス>:<API トークン>' \
https://api.bitbucket.org/2.0/repositories/WORKSPACE/REPO/pipelines/{PIPELINE_UUID}/stopPipeline
- 204:パイプラインと、終わっていないステップに止まるよう伝わりました。パイプラインは STOPPED で終わります。
- 400:パイプラインはもう終わっています。404:ワークスペース・リポジトリ・パイプラインのどれかがありません。
- API トークンには
write:pipelineのスコープが要ります。
新しいパイプラインに古いほうを止めさせる
Atlassian のサポートが勧めた手順を、パイプラインの最初のステップでします:
- 同じブランチの新しい順のパイプラインを読みます(
$BB_AUTHはメールアドレス:API トークン):curl -u "$BB_AUTH" "https://api.bitbucket.org/2.0/repositories/$BITBUCKET_REPO_FULL_NAME/pipelines/?target.branch=$BITBUCKET_BRANCH&sort=-created_on&pagelen=20"
state.nameがPENDINGかIN_PROGRESSで、build_numberが$BITBUCKET_BUILD_NUMBERより小さい物だけを残します。自分や、自分より新しい物は止めません。- 残った物の
uuidごとにstopPipelineを送ります。400 は、その間に終わったというだけです。
- 認証の値は secured のリポジトリ変数に置きます。
write:pipelineの API トークンか、パイプラインに書き込めるリポジトリのアクセストークン。 - デプロイは外します(
target.selectorを見る)。途中で止めたデプロイは環境を壊すことがある、と BCLOUD-22726 で利用者が書いています。 - セルフホストのランナーでは、新しいパイプラインが古いほうの後ろで順番を待つことがあり、そのときこのステップは遅すぎます。Atlassian のインフラで動くパイプラインは順番待ちにならない、と Atlassian は書いています。
- プルリクエスト用の Python のスクリプトの全文を、利用者が BCLOUD-23526 のコメント(2026年2月)に載せています。
止めずに順番待ちにする:concurrency groups
2025年6月から、ステップに concurrency-group を付けられます(Atlassian のお知らせ)。同じグループのステップは、パイプラインをまたいで1度に1つだけ、先に来た順に動き、ほかは Waiting to run で待ちます。デプロイが2つ同時に走るのは防げますが、古いほうは止まりません。どのパイプラインも最後まで動きます。
IntelliJ IDEA からパイプラインを止めるなら
Pipeline Inbox for Bitbucket Pipelines は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud のすべてのリポジトリのパイプラインを IDE のツールウィンドウに並べ、待っている・動いている・手動のステップで止まっている物を見る実行中の絞り込みと、いまのブランチのパイプラインをステータスバーに出します。動いているパイプラインのパイプラインを止める(英語の画面では Stop Pipeline)は同じ stopPipeline を送るので、自分のブランチの古い実行を Bitbucket を開かずに止められます。自分から勝手に止めることはしません。一覧・ステップ・ログは無料、実行・もう一度実行・停止は Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
Atlassian、Bitbucket、Bitbucket Pipelines は Atlassian の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:失敗したパイプラインをもう一度実行する · custom のパイプラインを変数つきで実行する · ビルド時間を使い切った · 「No online runner available」 · 「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