CI/CD
「Continuous Integration(継続的インテグレーション)」
「Continuous Delivery(継続的デリバリー)」の略。
アプリを作ったとしてもそれで終了ではない。バグの修正や機能追加等で、リリース後も様々な対応が必要となる。その度に、ソースコードのビルドやデプロイといった開発プロセスが発生する。個人で作っているような小さなアプリであれば小回りが効くが、企業で多くの関係者がいるプロジェクトの場合だと(人為的なミスを避けるためにも)自動化を検討する必要がある。
あまりにも分かりやすいので参考サイトの解説を引用。
テスト→ビルド→デプロイを自動化してくれるツールだが、最後のデプロイに関しては人の責任で行うということ。
まず、開発されたソースコードがバージョン管理ツール(Git)へコミットされると、CIによって自動的に「コードにエラーがないか」「既存の機能を破壊していないか」といった各種のテストが行われます。これにより「仕様どおりの機能が実装されているか」「既存のコードに影響はないか」といった確認が自動的に行われます。つまり、CIを実施することでバグを早期に検出したり、リリース用のブランチへバグが混入することを防げるのです。
CIによるテストをパスしたら、次はCDによってコードがリリース用のブランチにマージされ、ビルドが行われます。CDによってビルドされたアプリケーションは、自動でテスト用のサーバーに「デリバリー」され、すぐに動作確認が行えるようになります。これを「継続的デリバリー」と呼びます。
なお、「継続的デリバリー」では、変更したコードをテスト用のサーバーまでは自動でデリバリーしますが、本番環境へのデプロイは行いません。実際に本番環境へデプロイするかどうかは、都度人間が判断して行います。本番環境へのデプロイまで自動的に行うことは「継続的デプロイ」と呼び、両者は区別されています。
CI/CDは、単に作業効率を上げるだけでなく、テストやビルド作業から属人性を無くせるのがメリットです。つまり、テスト担当者ごとによる品質のばらつきや人的ミスを排除できるのです。品質を確保しつつリリースを高速化するため、こうした「新機能をコミットしたら自動でテスト・ビルド・デプロイを実行し、テスト環境ですぐに動作確認が可能。場合によっては、本番リリースまでも自動で行う」というCI/CDパイプラインの構築は非常に重要となっています。
画像引用:CI/CDとは
AWSで提供されているCI/CDツール
-
CodeCommit
ソースコード管理のためのGitリポジトリサービス。要はGitHubのこと。AWS提供ツールのため、各種AWSツールとの親和性が高い、セキュリティが強い、等の特徴がある。 -
CodeBuild
ソースコードのコンパイル/ビルド環境を提供するサービス。
継続的な開発が行われる開発現場では、最新ソースコードのビルド→実行までの流れを自動化することが多い。そのための専用のサーバーを調達して、Jenkinsのようなソフトウェアを導入したビルド環境を構築している。その辺りを一括で行なってくれるのがCodeBuild。 -
CodeDeploy
ビルド済みのモジュールのサーバーへのデプロイを自動化してくれるサービス。
個人で運営している小さなサービスであれば特段気にならないが、企業が提供する大規模なサービスの場合、一気にすべてのサーバーへのデプロイをせず、少しずつシステムを停止することなくデプロイをしたい、等のニーズが多くある。その際に途中でソースコードに問題が発覚した際の切り離し対応等、ビルドの方式を細かく検討していく必要が出てくる。その辺りの悩みを解決してくれるのがCodeDeploy。
CodeDeployは、EC2やLambda、オンプレサーバーに対してデプロイが可能。(※対象サーバーにCodeDeployエージェントがインストールされていることが必要)
デプロイ時の細かい設定(どこに何を配置するか、デプロイ前後の特定の処理を行う等)はappspec.ymlで定義することができる。 -
CodePipeline
上記3つ(CodeCommit,CodeBuild,CodeDeploy)は便利なサービスであるが、それぞれ「独立」したサービスとなっている。ただサービス運営において「ソースコード管理・ビルド・デプロイ」は3点セットである。このままだと「ソースコードが変更されたことを検知してビルドする」「ビルドの完了を待って検証完了にデプロイする」といった前段待ちが必要となってしまう。一連の流れを一括で管理してあげるのがCodePipelineである。
具体的には「ソースコードのpush→(Pushを検知して)ソースコードのビルド→(ビルド完了を検知して)デプロイ」が自動化されたパイプラインを作成してくれる。 -
CodeStar
上記4つのサービスを利用したCI/CD環境を自動構築してくれるサービス。
画像引用:【AWS】CodePipeline(コードパイプライン)とは何か?メリットは?コード変更後のデプロイを自動化する手順を実例で解説(セキュリティの高いプロジェクトのCI/CD化)
参考
・CI/CDとは
・【AWS】CodePipeline(コードパイプライン)とは何か?メリットは?コード変更後のデプロイを自動化する手順を実例で解説(セキュリティの高いプロジェクトのCI/CD化)