趣味インフラ趣味プロジェクトなので勝手にリリースごっこをしているだけであります。
初回リリース時の記事はこちら。
何が変わったか
issue & PR
0.1.0まではガシガシmasterに向けてcommit & pushしてましたが、そのあとはissue & PRで、ちゃんとcommitやPRにはrefでissue情報を加えています。現職での仕事の仕方に習っています。
で、今回の変更をPRベースで振り返ります。
Testing on CircleCI
このリポジトリ、TerraformでAWS上にインフラ(EC2)を作ったあと、ansibleでNginxを作って、InfratasterでL7のテストをするというものです。CIでは何をするか悩みました。悩んだ結果、AWS上には実際にリリースせず、テストに絞ることにしました。
テストをするにしても、実際にAWS上にインフラを作るわけではないので、TerraformとAnsible/Infratasterの2つにわけました。
Terraformは単純にplanをしているだけなので、テストとしては少し甘いかもしれません。TerraformもCI時はlocal(?)に実行できる(?)とかあればいいんですが、わけがわからないので諦め。
次にNginxをinstallするansibleと、構築後のNginxに対してL7のテストを行うInfratasterですが、CircleCIで立ち上がるコンテナに対して、local実行することにしました。
もともと、AWSに対して実行するときも、作成したEC2インスタンスのpublic IPアドレスをhosts、spec/spec_hosts.rbに出力していたので、CI実行時はlocalhostに書き換えることで対応できました。
使うDocker Imageもどうしようか悩んだのですが、Ansibleが入ったイメージをFROMとし、rbenvをいれる部分はDockerfileを書きました。
https://hub.docker.com/r/chaspy/nginx-up-and-running/
あとはAWSのcredentialですが、環境変数に持たせることでCIでもAWSに対してデプロイするときでも動くようにしました。
CIも、テストもとても大事なので、今回ちゃんとできてよかった。
Embedding build status badges
バッジつけましたー。
Build nginx from source with ngx_mruby module
ngx_mrubyを使うには、Nginxをbuildするときに指定しないといけません。以前軽くvagnratで動かした時にinstallのshellは書いていたので、それをplaybookにかきおこすダルい作業をしていました。
Ansible、loginしないから/etc/profileとかにexport書いても読んでくれなくてPATHとおらねー!とか、shell moduleとcommand moduleで謎の挙動違いがあってNo such file or directoryになったりとかで無駄にハマったりしました。
あとngx_mrubyのお試しで無駄にfizzbuzzを返すようにしていて、そのテストをInfratasterで書きました。
今後Nginx / ngx_mrubyのconfigとテストをメインにどんどん書いていきたいので、その基盤ができてよかった。
Add Japanese Document
結局ほぼほぼREADMEに書いている内容と同じになってしまったが、今後増えて行くといいと思う。そんな思いでまずは簡単に書いた。
いつまで続くかわかんないですが、薄い本というか、NginxをAWS上で、CI/CDこみで動かしたい、そういう職場で働いている、キャッチアップしたいひとが、git cloneしてすぐに動かして試せる、学習用の技術書。。。のサポートリポジトリ、みたいなイメージで今回取り組んでいます。
まだまだ道半ばですが、v1.0.0の頃にはそれなりのボリュームのものになればいいなと思います。まだまだ中身もよくないところたくさんあるし、少しずつ直しつつ、ようやくCI/CDまわりの基盤となる部分や、必要ソフトウェアの導入まで終わったので、今後はようやく中身!って感じですね。
今後
さっきも言ったけどNginxでできること、ngx_mrubyでできることをconfigを書きつつ、Infratasterでテストも書きつつ、ドキュメントも書きつつ、っていうのを少しずつ進めて、コンテンツを増やしていきます。
おわりに
Vagrant版もつくろうかなーって思っている。というか以前作ったのがあるので移行する感じで。。。