はじめに
Netlifyでホスティングしているリポジトリにsubmoduleで他のプライベートリポジトリを使おうと思ったら一手間必要だったので、その時のメモ
問題発生
Netlifyでホスティングしているリポジトリにsubmoduleで他のプライベートリポジトリを使おうと思い、ふつうにpush & buildしようとしたらbuildでこけた
Deploy logでは下記のようなError messageが
Preparing Git Reference refs/heads/master
Error fetching branch: https://github.com/owner/project refs/heads/master
Failing build: Failed to prepare repo
Failed during stage 'preparing repo': exit status 1
Finished processing build request in 6.873688521s
念のため、Clear cache and deploy site
を試みたが、
Preparing Git Reference refs/heads/master
Error checking out submodules: Submodule 'path/to/submodule' (https://github.com/owner/project) registered for path 'path/to/submodule'
などと言われて、通らず
どうして?
冷静に考えたら、自分以外の人(今回はNetlify)が特に認証なども行わずにプライベートリポジトリをクローンできたら問題だなぁと思った
対処法
Netilfy公式のdocsにあるRepository permissions and linkingをみるとしっかりと対処法が明記されていました。
If a submodule repository is public, you can use https format (for example, https://github.com/owner/project) to link it in your submodule configuration. If the repository is private, or if you prefer to use ssh format (for example, git@github.com:owner/project.git), you will need to follow the instructions below to generate a deploy key in Netlify and add it to the submodule repository settings.
ざっくり翻訳すると、
「submoduleがpublicであれば、submoduleのconfigにhttpsのurlを書けばOK
submoduleがprivate(またはsshを使いたい)であれば、Netlify内でdeploy key
を生成してsubmodule repositoryに設定しましょう」
ってな感じなので
つまり、deploy keyで設定してsshでアクセスを試みればよさそう
Deploy Keyの生成とGitHubへの追加
これも上記の公式のdocsをみれば書いてあるが、
Netlifyのサイト内でSettings
-> Build & deploy
-> Continuous deployment
-> Deploy key
までいきGenerate public key
を押す
すると
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDOG2pzIItUQ1IWKqQSN8pAB4VeHwHDFSw0M3ASVMj6sv+09zpBgA+bM0yf6x733q0hOPZASWf8IhmB8NINxz8d+DPndY6ORipQr3ROEhFS5gOfQZEEF6W9VO2ics3XwPczNT9E........
ってな感じの公開鍵が生成されるので、これをGitHubのsubmoduleリポジトリのSettings
-> Deploy keys
までいき、Add depoloy key
を押して、適当な名前を入力し、その下に生成された公開鍵をコピペし、Add key
を押します
.gutmodulesの修正
ホスティングしてるリポジトリの.gitmodules
をエディタでひらき、submoduleで使おうとしてるprivateリポジトリのurlを
https://github.com/owner/project
というhttps形式のものから
git@github.com:owner/project.git
というsshの形式のものに修正し、保存
submoduleをsyncして再push
その後、
$ git submodule sync
を実行し、.git/config
のsubmoduleセクションを更新
最後に、.gitmodules
の差分をpushしたらbuildが通るようになった