Netlifyでホスト&Deployさせている当サイト。プライベートレポジトリをsubmoduleとして使おうとしたときに、BitbucketとGithubの組み合わせでハマったので、上手く行った組み合わせの記録です。
記事を書いている人間のスペックは以下の通り。
- Gitはほぼ個人でしか使用していない
- SSH接続へのぼんやりとした理解
そのため、設定すべきところを間違えていた可能性も0ではなりません。
結論から言うと、
もともとの構成は
- Main: Bitbucketのprivateレポジトリ
- submodule: Githubの公開レポジトリ
でしたが、現在は、
- Main: Githubのprivateレポジトリ
- submodule: Githubのprivateレポジトリ
の構成で、NetlifyでDeployしています。
そして大前提として、新しい構成では、すべてのレポジトリをpublicではなくprivateで使いたい、という事情がありました。
元々使っていた組み合わせ
当サイトは2020年からWordPress→HUGOに環境を移行しました(WordPressからHugoに移行しました - 日なたの縁台)。
それに伴い、これまで書き溜めてきた記事を「Bitbucket」のプライベートレポジトリに上げ、「Github」に公開されている「tranquilpeak」というHUGOのテーマをsubmoduleとし、「Netlify」でホスト&Deployするという運用に切り替えました。
- Main: Bitbucketのprivateレポジトリ
- submodule: Githubの公開レポジトリ
そして、この設定であれば、特に問題なくNetlifyでdeployできていました。
なぜ現在最大手(?)のGithubでなく、2番手(?)のBitbucketを利用していたかというと、Gitをさわり始めた当時、Githubでは個人のプライベートレポジトリが作れず、Bitbucketではそれが可能だったからです。
組み合わせを変える必要が生じた経緯
その設定で4年半ほど運用してきましたが、HUGOのバージョンは上がってきているものの、「tranquilpeak」テーマの開発はストップしている状態で、最近ローカルでhugo server
を叩くと、「この機能はそろそろ無くすよ」というメッセージが出てくるようになっていました。
そんなわけで、一念発起してHUGOのオリジナルテーマ作ることにし、そのコードのGit管理元を「Bitbucket」の別のプライベートレポジトリとしていました。
ということで、
- Main: BitbucketのprivateレポジトリA(記事)
- submodule: BitbucketのprivateレポジトリB(オリジナルテーマ)
にしてNetlifyでDeployさせてみたところ…「permission denied」の嵐に見舞われました。
主要なエラーメッセージは、以下の通り。
Failed during stage 'preparing repo'
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
試したこと
なぜだ…???となって、確認したのがホストしているNetlifyからの情報。
Repository permissions and linking | Netlify Docsの「Access other repositories at build」という節(?)項(?)
読み進めていくと「Deploy keys」という項があり、このようなことが書かれています。
Submodule repositories linked in ssh format, including all private submodule repositories, require an SSH key called a deploy key (in GitHub and in GitLab), access key (in Bitbucket), or SSH key (in Azure DevOps).
Netlifyが発行しているSSH公開鍵をBitbucketレポジトリへ登録
つまりは、「あなたのプライベートレポジトリにアクセスできるように、キーを登録しなさい」ということだと読み取り、submoduleとして使いたい「Bitbucket」のpriavateレポジトリBに、NetlifyがDeployするサイトごとに発行する「Deploy key」を登録しました。
Netlifyが発行するSSH公開鍵(Deploy key)は、「Sites」→「該当のサイト」→「Deploys」→「Deploy Settings」→「Deploy key」にあります。
Bitbucket側での登録先は「レポジトリ」→「Repository settings」→「アクセスキー」→「Add key」がそれに対応するものだと思い、そこに追加しました。
が、Deployすると、レポジトリにアクセスできないと言われることは変わらず。
そして、何回かエラーが出たことで、Netlifyのエラーメッセージ内で、以下のページを提示されました。
そこを読んでいくと、以下のように「レポジトリを一回解除して、もう一回再接続してみて」と書かれているので、
If you are seeing your build fail with exit status 128 in the deploy log, relinking your repo using our UI is a good first attempt to fix things (go to Site configuration > Build & deploy > Continuous deployment > Repository, select Manage repository, then Link to a different repository).
MainのレポジトリAを再接続して、Deploy キーもまた発行して、Bitbucketのレポジトリに登録し直して、などを数回繰り返したものの、やはりアクセスが拒否される状態は変わらず…。
submoduleレポジトリをGithubに変更
もとの環境では、submoduleとしてGithubの公開レポジトリが使えていたので、Githubにしたら上手くいくかも?と思い、
- Main: Bitbucketのprivateレポジトリ
- submodule: Githubのprivateレポジトリ
に変更して、再度Deployキーを登録し直してトライしてみました。
Github側でのNetlifyからのDeploy keyの登録先は、「該当のレポジトリ」→「Settings」→「Deploy keys」。
ですが、やはりこの設定でもsubmoduleにアクセスできませんと出ました。
Deploy keyの登録だけでなく、この他にも.gitmodules
でのurl
をSSH接続のアドレスに変えたりもしてみましたが、結果は変わりませんでした。
最終解:Githubにレポジトリを統一
ということで、個人的にはわりとメインで使ってきていた「Bitbucket」に別れを告げ、MainもSubmoduleも「Github」のレポジトリに移行させました。
最終的な設定は、冒頭にも書きましたが、以下の通り。
- Main: GithubのprivateレポジトリA(記事用)
- submodule: GithubのprivateレポジトリB(HUGOオリジナルテーマ用)
これで、submoduleにしたいレポジトリBにDeploy Keyを追加し、Netlify側でのターゲットレポジトリをレポジトリAで登録することで、無事Netlifyでdeployできました。
ふり返り
Bitbucketにはお世話になっていたのですが、公式からの情報がGithubに比べると整理されていない(よく言えば詳細で豊富すぎる)というか、欲しい情報にピンポイントでたどり着きにくかったり、ユーザー数の関係からか日本語での情報も少なかったりもするといったデメリットを今回少し感じてしまいました。
とは言え、そもそも、privateレポジトリではなく、どうせ全世界に公開しているのだから大人しく公開レポジトリを使っていれば、Bitbucketでも、Netlifyで問題なくDeployできたと思います。
ということで、privateレポジトリのまま運用したいという需要はあまり多くないかもしれませんが、試行錯誤している際に参考情報に出会うことができなかったので、いつかどこかのどなたかのために記事にしてみました。