元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

OpsWorksなどの自動化ツールで、GitHubプライベートリポジトリをsubmoduleで使いたい

f:id:uzuki05:20141016113704p:plain

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トークンを発行すると、httpsBasic認証で使用できます。

Creating an access token

これを.gitmodulesでの指定で使うことで、OpsWorks上でもcloneできます。

[submodule "site-cookbooks"]
    path = site-cookbooks
    url = https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:x-oauth-basic@github.com/takeyuweb/myapp-cookbooks.git
    branch = trunk

リポジトリ上にトークンを含めることになるのが気持ち悪いですが、ユーザー名やパスワードよりはマシですね。