画像

[2014-01-09-1] からmasutaka.netのCIを開始したが、残念ながら
masutaka.netに直接serverspecする、なんちゃってCIだった。
masutaka.netにcookしてからPRを出して、WerckerにCIさせていた。

WerckerとAWSを連携させて、テストのたびにサーバをまっさらな状態から
作り、終わったら破棄することが可能になったので、ここに記録しておく。

去年くらいに話題になったこの辺の話。
Vagrant + Chef Solo + serverspec + Jenkins でサーバー構築を CI - naoyaのはてなダイアリー
naoya/circleci-serverspec

なんで今までやらなかったかというと、cookが一発で通らないレシピになっ
ていたから。。気づいてはいたんだけど、本番サーバのテストが通りさえ
すればよかったし。。。

インフラ系技術の流れ - Gosuke Miyashita

こちらの記事でいうところの、Orchestrationの仕事までChefにやらせてい
たのが敗因。GitHubのprivateリポジトリにおいてあるdotfilesや、
growthforecast、tiarra、mobircまでもChefにインストールさせていた。

ユーザmasutakaに依存しないレシピに変更して、手元の
Vagrant+VirtualBoxで一発でspecが通るまでがステップ1。

次に手元のVagrant+AWSで同じことが出来るまでがステップ2。

これをWercker上で実行できるようにwercker.ymlを書き換えたのがステッ
プ3。

最終的なVagrantfileとwercker.ymlは以下のとおり。

いくつかハマったけど、凡ミスだったので特には触れない。上の設定に従
えば同じことは出来るはず。(CircleCIだと各インスタンスにssh出来るの
で、調査は早かったんだろうと夢想。)

でも一点だけad hocな対応をしていて、plenvやrbenvを使ったPerl/Rubyの
インストールはビルド済みのtar ballを展開するだけに変更した。
Werckerはビルドが5分間止まると失敗だと見なすから。ビルド全体の時間
は25分までOK。

そもそもImmutable Infrastructure的にplenvやrbenvを使うのはどうなの?
という節もあって、そこは今後変えるかもしれない。

wercker.ymlも毎回Vagrantをインストールして、vagrant upするという無
駄なことをしているので、Docker使って時短させるかもしれない。

とりあえずCI出来るようになったので、今回はこれで良しとする。