タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

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

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