Lesstep
Bitbucket Cloud・Pipelines・2026年10月30日に確認

Bitbucket Pipelines の「Step exceeded processing limits and has timed out」

ステップが2時間ほど止まったあと失敗し、ビルドのログの横にこのメッセージが出ます。Atlassian の記事(Bitbucket pipeline build fails with error "Step exceeded processing limits")が挙げる原因は1つです:そのビルドで使えるワークスペース・リポジトリ・デプロイメントの変数の名前と値を全部つなげた長さが、12万文字(120,000)を超えている。同じ原因で、パイプラインが待ち行列に残ったまま終わらないこともあります。記事は原因を、コマンドではなく変数の側に置いています。

「Exceeded build time limit」とは別のもの

どちらのメッセージも2時間で出ることがあります。「Exceeded build time limit of 120 minutes」は、ステップのコマンドが max-time より長く動いたという意味です。こちらは変数の大きさの話です。合計が12万文字より短いのにこのメッセージが出るなら、Atlassian はビルドの URL を添えてサポートに問い合わせるよう書いています。

変数のある場所

保護された(secured)変数の値は、これらの画面に出ません。Bitbucket の API も空で返します(Pipelines の API の説明:“If the variable is secured, this will be empty.”)。その値は自分で知っていて、長さを足す必要があります。

スクリプトで足す

この Python 3 のスクリプトは、何も入れずに動きます。Bitbucket の API から3つの段を読み、デプロイメントの無いステップの合計と、デプロイメントの環境ごとの合計を出します。保護された変数の値は0として数え、その名前を出すので、何を足せばよいかが分かります。スコープ read:pipeline:bitbucket の API トークンを作ります。ログインには Atlassian アカウントのメールアドレスとトークンを使います(Atlassian の Using API tokens)。

import base64, json, os, sys
from urllib.parse import quote
from urllib.request import (
    Request, urlopen)

API = "https://api.bitbucket.org/2.0"
ws, repo = sys.argv[1], sys.argv[2]
who = os.environ["BB_EMAIL"] + ":"
who += os.environ["BB_TOKEN"]
auth = "Basic " + base64.b64encode(
    who.encode()).decode()
head = {"Authorization": auth}


def values(path):
    url = API + path
    while url:
        req = Request(url, headers=head)
        res = urlopen(req)
        page = json.load(res)
        yield from page["values"]
        url = page.get("next")


def size(path, at):
    n = 0
    for v in values(path):
        k = v["key"]
        n += len(k)
        n += len(v.get("value") or "")
        if v.get("secured"):
            print(at, "secured:", k)
    return n


r = f"/repositories/{ws}/{repo}"
base = size(
    f"/workspaces/{ws}"
    "/pipelines-config/variables",
    "workspace")
base += size(
    r + "/pipelines_config/variables",
    "repository")
print("no deployment:", base)
for e in values(r + "/environments"):
    at = e.get("name", e["uuid"])
    u = quote(e["uuid"])
    n = size(
        r + "/deployments_config"
        f"/environments/{u}/variables",
        at)
    print(at + ":", base + n)

vars.py という名前で保存し、リポジトリの住所に出ているワークスペースとリポジトリを付けて動かします:

export BB_EMAIL=you@example.com
export BB_TOKEN=...
python3 vars.py my-workspace my-repo

Atlassian の記事のとおり、3つの段の変数を全部足します。ワークスペースの変数と同じ名前のリポジトリの変数も、両方数えます。このスクリプトは、Bitbucket の API の説明どおりに答える手元のサーバー(next のリンクで続くページ・波かっこ付きの環境の UUID・空で返る保護された値)に対して動かし、思ったとおりの合計が出ました。本物のワークスペースでは動かしていません。

合計を短くする

Atlassian の直し方は、変数を消すか、とても長い値を短くして、合計を12万文字より短くすることです。最初に見るのは、ファイルを丸ごと入れた値です。証明書・キーストア・鍵ファイルを base64 にしたものなどがそうです。base64 は元のファイルより3分の1長くなるので、30 KB のファイル1つで4万文字になります。そのうえで:

この場合にもっと分かるエラーを出してほしいという要望は、まだ開いたままです:BCLOUD-20105(2020年4月に作成・「Gathering Interest」)。

IntelliJ IDEA で失敗したステップを見る

Pipeline Inbox for Bitbucket Pipelines は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud の全部のリポジトリのパイプラインを、ステップと一緒に IDE のツールウィンドウに並べます。Bitbucket がステップを自分で終わらせたときは、Bitbucket が示した理由を見せ、続けてそのとき動いていたコマンドとその最後の行を見せます。変数を短くしただけなら、push する新しいコミットがありません。Pro なら Run again で、同じコミットを IDE からもう一度ビルドできます。一覧・ステップ・ログは無料。実行・やり直し・停止は Pro(月 US$1.50・30日の無料試用つき)。

JetBrains Marketplace で入れる

Atlassian・Bitbucket・Bitbucket Pipelines は Atlassian の商標、Python は Python Software Foundation の商標、AWS は Amazon.com, Inc. またはその関連会社の商標、Google Cloud は Google LLC の商標、Vault は HashiCorp の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページはそのいずれとも提携しておらず、承認も受けていません。

ほかに:「Exceeded build time limit of 120 minutes」 · 「No space left on device」 · 「No online runner available」 · 「We couldn't clone the repository」 · サブモジュールを取ってこない · 「command not found」 · 「unexpected system error」 · キャッシュが効かない · push したのに Pipelines が動かない · 「Container 'Build' exceeded memory limit.」 · 「Container 'docker' exceeded memory limit.」 · 次のステップにアーティファクトが無い · 前は通ったビルドが今は落ちる · 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