このブログは GitHub で管理しており、master に commit が追加される
と、CircleCI が capistrano を使ってデプロイします。
[2017-04-13-1]
でテストを CircleCI 2.0 で動かしたので、デプロイも
試してみました。
最終的な circle.yml とデプロイスクリプトはこちらになりました。
基本的に “add_ssh_keys” と “deploy” step 以外は [2017-04-13-1]
と
同じです。ハマりそうなところだけ記載していきます。
ハマりそうなところ
Deployments - CircleCI のとおり、“deploy” step があればデプロイ出来ます。
ただ capistrano で GitHub の private repository をデプロイする場合、
最低 2 つは SSH Key が必要になると思います。
(1) 本番サーバ(masutaka.net)への SSH ログイン
(2) SSH ログイン後に GitHub に SSH アクセス
これらの設定方法を説明していきます。
デバッグは CircleCI の各ジョブの Rebuild with SSH から、実際に本番
サーバに ssh ログインできるか確認していくと、分かりやすいと思います。
(1) 本番サーバ(masutaka.net)への SSH ログイン
(1) の SSH Key をコンテナに注入するのが “add_ssh_keys” step です。
私は ssh-keygen で作った秘密鍵は以下のように登録し、対応する公開鍵
は本番サーバの ~/.ssh/authorized_keys に記載しています。
例: https://circleci.com/gh/masutaka/masutaka.net/edit#ssh
circle.yml で “add_ssh_keys” step を追加する
ことで、コンテナの
~/.ssh/config がこのように設定されます。
Host masutaka.net
IdentitiesOnly yes
IdentityFile /root/.ssh/id_rsa_437fb2...
masutaka ユーザとしてデプロイするために、さらに ~/.ssh/config に追
記しました。
最終的な ~/.ssh/config は以下になります。“ForwardAgent yes” は後述
します。
Host masutaka.net
IdentitiesOnly yes
IdentityFile /root/.ssh/id_rsa_437fb2...
User masutaka
ForwardAgent yes
Rebuild with SSH してコンテナに SSH ログインした後、
“$ ssh masutaka.net” 出来るようになりました。
(2) SSH ログイン後に GitHub に SSH アクセス
(2) の SSH Key はなにもしなくてもコンテナにあると思います。
Preferred にチェックが付いている SSH Key の秘密鍵が ~/.ssh/id_rsa
として存在していました。
例: https://circleci.com/gh/masutaka/masutaka.net/edit#checkout
余談ですが、~/.ssh/authorized_keys の fingerprint はこのような関数
で確認すると良いと思います。
ssh-agent を起動させ、ssh-add する
ことでメモリ上に ~/.ssh/id_rsa
がキャッシュされます。さらに前述の “ForwardAgent yes” の設定により、
本番サーバに SSH ログインした時に GitHub の Permission が存在する
状態になります。
“$ ssh masutaka.net” 後に、適当な GitHub の private repository を
git clone 出来るようになりました。これでデプロイも出来ると思います。
まとめ
capistrano で GitHub の private repository をデプロイするためには、
2 つの SSH Key が必要でした。設定方法は微妙に異なります。