Fork me on GitHub

継続的インテグレーション

継続的インテグレーション(CI)はビルド、テスト、デプロイを自動化するための方法です。

継続的インテグレーションはなぜ重要?

CIを正しくセットアップすると、自動テストにより手動で動作確認するよりもデプロイにかかる時間を大幅に縮小できます。ソースコードはプロジェクトが進めば変わっていきます。CIをユニットテスト、インテグレーションテストと連携することで、コードの編集によりアプリケーションが壊れる心配は無くなるでしょう。

継続的インテグレーションの例

以下の図は、継続的インテグレーションとデプロイの役割を表したものです。

継続的インテグレーションの一例

上の図ではレポジトリに新しいコードがコミットされたら、新しいコードをビルドするように、CIサーバに通知が送られます。(通知を送ることができないCIサーバの場合、レポジトリサーバを定期的にチェックする必要があります。)

CIサーバはコードを取り込みビルドとテストを行います。全てのテストが成功したらデプロイプロセスを始めます。デプロイが始まるとサーバへ新しいコードが取り込まれ、サービスの再起動や他のデプロイプロセスを行った後、デプロイプロセスが完了します。

CIサーバとデプロイのプロセスの構成方法は様々な形式があります。上で説明したセットアップはシンプルな構成例の一つでしかありません。

オープンソースのCIプロジェクト

  • Jenkinsはテストと本番環境のデプロイを構築するCIサーバの中でも一般的なソフトウェアです。GitHub.
  • BuildBotはCIフレームワークです。コンポーネントを組み合わせて、自分のCIサーバを作ることができます。Pythonで書かれていて、ビルドとデプロイプロセスをより柔軟にコントロールしたい場合に使用します。GitHub

CIサービスのホスティング

  • Travis CIはオープンソースプロジェクトであれば無料で利用できます。プライベートリポジトリには商用版を利用できます。
  • BambooAtlassianがホスティングするCIサービスです。こちらもオープンソースプロジェクトであれば無料で利用できます。
  • Circle CIはGitHub上のオープン、クローズドなプロジェクトをHerokuにデプロイすることができます。
  • ShippableはDockerコンテナを利用しビルドとインテグレーションプロセスを高速化することができます。パブリックレポジトリであれば無料で利用できます。
  • Droneもオープンソースプロジェクトが無料で利用できるCIサービスです。
  • CodeshipはPython2.7対応のCIを提供しています。
  • SnapはCIサーバとビルドツールを提供しているサービスです。

CIを学ぶためのリソース

次にアプリケーションへ何を追加しますか?

運用中のアプリケーションで発生したイベントをロギングする方法は?

Webアプリケーションのセキュリティ対策は?

外部APIを使うには?


Interested in a complete Full Stack Python book with detailed tutorials and example code? Sign up here and you'll get an alert email if a book is created. No other emails will be sent other than sign up confirmation.