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 の例は、ユーザー名とアプリパスワードを使っています。Bitbucket Cloud は 2026年7月28日にアプリパスワードを受け付けなくなり、HTTPS の Git には今は 「The requested URL returned error: 410」 が返ります。
- SSH の例は
git@bitbucket.org:を使っています。SSH の Git はssh.bitbucket.orgに移ります。bitbucket.org への SSH は 2026年11月12日から試験停止の間に失敗し、12月10日に止まります(日程)。 - 記事は資格情報の入った住所で
.gitmodulesを書き換えます。git submodule initの後に、取ってきた中身の側の設定で住所を変えれば、管理しているファイルを変えずに同じことができます。
HTTPS とリポジトリのアクセストークン
- サブモジュールのリポジトリで:Settings、Security の下の Access tokens、Create access token。権限は Repositories: Read。Atlassian の Create an access token for a repository によると、トークンが届くのはそのリポジトリだけです。トークンは1回しか表示されません。
- ビルドが動くリポジトリで:Repository settings、Pipelines、Repository variables に変数
SUBMODULE_URLを Secured で作り、住所とトークンを入れます。ユーザー名はx-token-authです(Using access tokens):https://x-token-auth:<トークン>@bitbucket.org/<ワークスペース>/<サブモジュール>.git。保護された値は、Pipelines がビルドのログで隠します。 - ステップのスクリプトで、取ってきた後に:
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日の無料試用つき)。
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