皆さん Travis CI 使ってますか?私は最近使い始めてその簡単さに驚きおののき,なんでもっと早く使ってなかったんだと激しく後悔しております.
テストの自動化が出来るならデプロイも自動化出来る?いやしかしこれはテスト特化のサービスなんじゃ…
そう思ってたのですがどうもデプロイ自動化も出来るらしいんですね.それで昨日早速試してみたら何と当たり前のように出来てしまいました.
Heroku の API Key を隠すこともきちんと出来るので安心っぽいです.
さてその方法に関しては,以下の記事が大変分かりやすいです.自動デプロイそのもののやり方に関しては今回うちでは解説しませんので,こちらを参考にして下さい.
- Deploying to Heroku with Travis CI | Neil Middleton
- Deploying to Heroku from TravisCI
- Travis CI からHerokuへのデプロイを自動化してみた - sinsokuのブログ
今回うちで改めて解説するのはタイトルにもある通りのことです.
先程の記事をそのまま参考にして自動デプロイを行おうとすると,
heroku keys:clear
というコマンドによって,普段自分が使っている (使っていた) 公開鍵が根こそぎ削除されてしまいます.これはつらぽよです.
なので上記のコマンドは削除して,追加された公開鍵だけを Heroku への push 後に削除すればいいと言えます.
それを行うための変更が以下の通りとなります.
...
after_success:
- wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
- git remote add heroku git@heroku.com:HEROKU_APP_NAME.git
- echo "Host heroku.com" >> ~/.ssh/config
- echo " StrictHostKeyChecking no" >> ~/.ssh/config
- echo " CheckHostIP no" >> ~/.ssh/config
- echo " UserKnownHostsFile=/dev/null" >> ~/.ssh/config
- - heroku keys:clear
- yes | heroku keys:add
- yes | git push heroku master
+ - heroku keys:remove $(cat ~/.ssh/id_rsa.pub | awk '{print $3}')
env:
global:
- secure: |-
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
cat ~/.ssh/id_rsa.pub
で今回使った公開鍵を表示して,鍵の指定に必要な部分を awk で切り取って表示して,表示したもの heroku keys:remove
の引数として使ってやる,という流れです.
なんでこんなことしないといけないかというと使われる公開鍵がビルドごとに毎回変わるんですよ Travis CI って.なので heroku keys:clear
を取り除いただけではどんどん Travis CI の新しい公開鍵が追加されて行ってしまいます.それはそれでつらぽよです.
個人的に,なんでこれがデフォルトじゃないのかが不思議です… (なんでデフォルトで heroku keys:clear
なんてされてしまうのか…)
すみません travis のデフォルトで heroku keys:clear
されるんじゃなかったです.after_success で実行されるコマンドが自動生成されたと勝手に勘違いしていた自分が謎 (いや理由は分かってるんですが釈明するほどのことじゃない).