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

Bitbucket Pipelines が git のサブモジュールを取ってこない

ビルドで取ってきた中身の、サブモジュールのはずのフォルダが空。あるいは取りにいったステップが fatal: could not read Username for 'https://bitbucket.org' で失敗する。Pipelines がビルドの準備で取ってくるのは自分のリポジトリだけで、サブモジュールは取ってきません(Atlassian の記事 Git Submodule not being cloned in the Pipeline build)。ステップにサブモジュールのリポジトリへ入る手段を渡し、git submodule update --init を自分で、要るステップごとに動かします。ステップはそれぞれ新しいコンテナで始まるからです。

Atlassian の記事から変わったこと

HTTPS とリポジトリのアクセストークン

  1. サブモジュールのリポジトリで:Settings、Security の下の Access tokens、Create access token。権限は Repositories: Read。Atlassian の Create an access token for a repository によると、トークンが届くのはそのリポジトリだけです。トークンは1回しか表示されません。
  2. ビルドが動くリポジトリで:Repository settings、Pipelines、Repository variables に変数 SUBMODULE_URL を Secured で作り、住所とトークンを入れます。ユーザー名は x-token-auth です(Using access tokens):https://x-token-auth:<トークン>@bitbucket.org/<ワークスペース>/<サブモジュール>.git。保護された値は、Pipelines がビルドのログで隠します。
  3. ステップのスクリプトで、取ってきた後に:
script:
  - git submodule init
  - >-
    git config submodule.lib.url
    "$SUBMODULE_URL"
  - git submodule update

lib はサブモジュールの名前で、.gitmodules の [submodule "lib"] のものです(パスと同じとは限りません)。git submodule init が .gitmodules の住所を取ってきた中身の設定に写し、次の行がそこで置き換え、git submodule update がその住所から取ってきます。Git 2.53 で手元の写しに3つのコマンドを動かし、サブモジュールが置き換えた住所から取り出され、git status がきれいなままなのを確かめました。サブモジュールが複数あるときは、それぞれのリポジトリで作ったトークンと、それぞれの行を使います。

トークンが違うか期限切れなら、Git は remote: You may not have access to this repository… と fatal: Authentication failed を出します(このメッセージが指すこと)。

SSH と Pipelines の SSH キー

同じ記事から:ビルドが動くリポジトリの Repository settings、Pipelines の下の SSH Keys で鍵の組を作って公開鍵をコピーし、サブモジュールのリポジトリの Repository settings、Security の下の Access keys に足します。これでビルドはサブモジュールを読めるようになります(読み取りだけ)。あとは上と同じように、新しいホストで住所を入れます:

script:
  - git submodule init
  - >-
    git config submodule.lib.url
    git@ssh.bitbucket.org:ws/lib.git
  - git submodule update

セルフホストの Linux シェル・macOS・Windows のランナーでは、記事は代わりに自分で鍵の組を作る手順にしています。ステップが Host key verification failed. で止まるなら、ビルドがまだ ssh.bitbucket.org を信頼していません:ホストの鍵の足し方。上の HTTPS のやり方は、SSH の移行に左右されません。

IntelliJ IDEA で失敗したコマンドを見る

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

JetBrains Marketplace で入れる

Atlassian・Bitbucket・Bitbucket Pipelines は Atlassian の商標、Git は Software Freedom Conservancy の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページはそのいずれとも提携しておらず、承認も受けていません。

ほかに:「command not found」 · 「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