CI/CD - 継続的インテグレーション/継続的デプロイ

CI/CD

CI (継続的インテグレーション、Continuous Integration)

アプリケーションのコードを追加または修正するたびにテストを実行し、確実に動作するコードを維持する方法を継続的インテグレーション (CI, Continuous Integration) という。継続的インテグレーションは、ソフトウェアの品質向上を目的として考案された開発プロセスである。

  • ビルドとテストの自動化。
  • すべての開発が終わった後にコード品質を管理する従来方式の欠点を解消するために生まれた概念である。
  • 開発しながらコードの統合を継続的に進めることで品質を維持する。

CD (継続的デプロイ、Continuous Deploy または Delivery)

  • デプロイの自動化。
  • ソフトウェアが常に信頼可能なレベルでデプロイできるよう継続的に管理するという概念である。

Fault-tolerant (無停止) システム

  • Fault Tolerant コンピュータシステムとは、システム内のいずれかの部品またはモジュールに Fault (障害) が発生しても、システム運用に支障が出ないよう設計されたコンピュータシステムである。
  • フォールトトレラントシステムは、システムを構成する部品の一部で fault または failure が発生しても、正常または部分的に機能を遂行できるシステムである。

デプロイの種類

Rolling Deployment

  • ローリングアップデート方式は、新バージョンのサーバーを作りながら、トラフィックを旧バージョンのサーバーから新バージョンのサーバーへ徐々に移す形式である。

Blue-Green Deployment

  • アプリケーションまたはマイクロサービスの旧バージョンにあったユーザートラフィックを、旧バージョンとほぼ同一の新バージョンへ段階的に移行するアプリケーションリリースモデルである。
  • 旧バージョンを blue 環境、新バージョンを green 環境と呼ぶことができる。本番トラフィックが blue から green へ完全に移行されたら、blue はロールバックに備えて待機状態にするか、本番から外した後に更新して次回更新のテンプレートにできる。

Canary Deployment

  • Canary という用語の由来を知ると理解しやすい。Canary はカナリアという鳥を指し、この鳥は一酸化炭素や有毒ガスに非常に敏感だといわれる。そのため、昔の鉱夫はこの鳥をそばに置いて鉱山で作業し、カナリアが突然死ぬと避難したという。
  • Canary デプロイは、カナリアのように危険を素早く検知できるデプロイ手法である。カナリアデプロイでは一部のサーバー、たとえば 10% 程度にだけ新バージョンをデプロイして運用し、問題がないことを確認した後、徐々にすべてのサーバーへ新バージョンをデプロイする。

CI/CD ツール

  • Jenkins
  • Travis CI
  • Bamboo
  • CircleCI
  • TeamCity