OpsWorksなどの自動化ツールで、GitHubプライベートリポジトリをsubmoduleで使いたい
OpsWorksにデプロイしているアプリで、Gitのsubmoduleを使う場合、通常のデプロイキーを使う方法ではプライベートリポジトリを参照することはできません。
---- Begin output of git submodule update --init --recursive ---- STDOUT: Submodule 'site-cookbooks' (ssh://git@ssh.github.com:443/takeyuweb/myapp-cookbooks.git) registered for path 'site-cookbooks' Cloning into 'site-cookbooks'... STDERR: ERROR: Repository not found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. Clone of 'ssh://git@ssh.github.com:443/takeyuweb/myapp-cookbooks.git' into submodule path 'site-cookbooks' failed ---- End output of git submodule update --init --recursive ---- Ran git submodule update --init --recursive returned 1 [2014-10-16T01:52:19+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
少しハマったのですがとりあえず回避する方法がわかったのでメモ。
HTTPS で OAuth Token を使う
GitHubのユーザープロフィールページからOAuthトークンを発行すると、httpsのBasic認証で使用できます。
これを.gitmodules
での指定で使うことで、OpsWorks上でもcloneできます。
[submodule "site-cookbooks"] path = site-cookbooks url = https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:x-oauth-basic@github.com/takeyuweb/myapp-cookbooks.git branch = trunk
リポジトリ上にトークンを含めることになるのが気持ち悪いですが、ユーザー名やパスワードよりはマシですね。