継続的インテグレーション
継続的インテグレーション(CI)はビルド、テスト、デプロイを自動化するための方法です。
継続的インテグレーションはなぜ重要?
CIを正しくセットアップすると、自動テストにより手動で動作確認するよりもデプロイにかかる時間を大幅に縮小できます。ソースコードはプロジェクトが進めば変わっていきます。CIをユニットテスト、インテグレーションテストと連携することで、コードの編集によりアプリケーションが壊れる心配は無くなるでしょう。
継続的インテグレーションの例
以下の図は、継続的インテグレーションとデプロイの役割を表したものです。

上の図ではレポジトリに新しいコードがコミットされたら、新しいコードをビルドするように、CIサーバに通知が送られます。(通知を送ることができないCIサーバの場合、レポジトリサーバを定期的にチェックする必要があります。)
CIサーバはコードを取り込みビルドとテストを行います。全てのテストが成功したらデプロイプロセスを始めます。デプロイが始まるとサーバへ新しいコードが取り込まれ、サービスの再起動や他のデプロイプロセスを行った後、デプロイプロセスが完了します。
CIサーバとデプロイのプロセスの構成方法は様々な形式があります。上で説明したセットアップはシンプルな構成例の一つでしかありません。
オープンソースのCIプロジェクト
- BuildBotはCIフレームワークです。コンポーネントを組み合わせて、自分のCIサーバを作ることができます。Pythonで書かれていて、ビルドとデプロイプロセスをより柔軟にコントロールしたい場合に使用します。GitHub
CIサービスのホスティング
- Travis CIはオープンソースプロジェクトであれば無料で利用できます。プライベートリポジトリには商用版を利用できます。
- Circle CIはGitHub上のオープン、クローズドなプロジェクトをHerokuにデプロイすることができます。
- ShippableはDockerコンテナを利用しビルドとインテグレーションプロセスを高速化することができます。パブリックレポジトリであれば無料で利用できます。
- Droneもオープンソースプロジェクトが無料で利用できるCIサービスです。
- SnapはCIサーバとビルドツールを提供しているサービスです。
CIを学ぶためのリソース
次にアプリケーションへ何を追加しますか?
運用中のアプリケーションで発生したイベントをロギングする方法は?