つよつよエンジニアになりたい

つよつよエンジニアになりたいエンジニアが日々の学びや気づきをアウトプットしていきます

CI/CDについて

「CIとCDってなんだっけ?」って聞かれた時に上手い説明ができないなと思ったので記事にしてまとめていきます。

CIとは?

Continuous Integrationの略で日本語では「継続的インテグレーション」と言います。

インテグレーションを訳すと「統合、統一、融合」といった意味を持ちます。継続的インテグレーションとはつまり、継続的に何かをまとめ上げてどこかに統合しようということです。ここでいう何かとは「コードの変更」のことで、どこかは「プロジェクト全体でコードを管理している場所(メインブランチとか)」です。ソフトウェア開発では開発者がプロジェクトのメインとなる場所からコードをコピーしてきてローカル環境で開発を行います。当然ローカルで開発を行えばメインのコードとは異なる部分が出てきます。最終的にその「コードの変更」をメインとなる場所にマージしてビルドしてテストして完了となります。この一連の流れを自動化する仕組みが継続的インテグレーションというわけです。

また、CIはエクストリーム・プログラミング(XP)のプラクティスとして確立

なぜCIを導入するのか?

一言で言うと、ソフトウェア開発の品質と生産性を向上するためです。

CIを導入することでビルドやテストを自動化してくれるため一日に多くのインテグレーションが可能になります。短い期間でインテグレーションが行われればその分変更箇所も減り、バグの早期発見にもつながります。

CDとは?

Continuous Delivery / Continuous Deploymentの略で日本語では「継続的デリバリ」「継続的デプロイ」と言います。この二つには明確な違いがあるようです。継続的デリバリはビルド、テスト、ステージング環境へのデプロイを自動化しますが、本番環境へのデプロイには明示的な承認が必要となります。一方で継続的デプロイにはその承認が不要で全てのテストに合格した段階で本番環境にもデプロイされます。

図にしてみました。

CI/CDイメージ図

AWS CodePipelineで言うと上司からの承認パイプラインをデプロイの前に組み込んで、承認されるとデプロイするのが継続的デリバリでそこから承認をなくすと継続的デプロイになるといった感じでしょうか。

CI/CDツール

CI/CDを実現するツールは大きく分けてオンプレミス型とクラウド型の2種類あります。オンプレミス型ではJenkins、クラウド型ではCircleCIが有名です。オンプレミス型では拡張性が高い、自前のサーバが必要といった特徴があり、クラウド型は拡張性には乏しいが自前でサーバを持つ必要がなく環境構築が容易という特徴があります。

※実際にJenkinsとCircleCIを触ったわけではないので間違った記述があるかもしれません。

オンプレミス型

  • Jenkins
  • Concourse CI

クラウド

  • CircleCI
  • Travis CI
  • Codeship
  • AWS CodePipeline
  • GCP Cloud Build

参考