はじめに
今回はAzureを利用してCICDを構築しようと思います。
構築するまえにCI/CDについて説明します。
CI/CDとは?
アプリケーションの構築、テスト、および展開の自動化を実施することにより、
開発および運用アクティビティとチームの間のギャップを埋めることです。
CI(continuous integration)
継続的インテグレーションと言う意味です。
CIとは継続的にクオリティコントロールを適用するプロセスを実行することを言います。
最小限の努力で新しいコードを配布することを目指しています。
多数の開発者がバージョン管理ツール(ex. Git, SVNなど)を共有して使用する環境にCIが必要です。
継続的に運用するサービスや開発中のサービスに機能追加するさいにコミットしてレポジトリをアップデートします。
多数の開発者が1つのチームで作業している場合、このレポジトリに多数のコミットが積み重ねられます。
コミットするたびに毎度ビルド・テスト・マージまでするのであれば、かなりの時間が必要となります。
このような状況で、CIは自動化されたビルド・テストで既存のコードと新しいコードとの競合を防ぎます。
CD(continuous delivery)
継続的デリバリーまたは継続的な展開という意味です。
Continuous Deliveryは共有レポジトリで自動的にReleaseすること、
Continuous DeploymentはProductionレベルまで自動的にデプロイすることを意味します。
複数のワークを複数のサーバーに展開する環境にCDが必要です。
手作業で複数のワークを複数のサーバーに展開する際に発生しやすいミスを防ぐことができます。
CI/CDの種類
- Jenkins
- CircleCI
- TravisCI
- Github Actions
- etc
CI/CIDの構成例
構成とデータフロー
構成
利用するサービス
- GitHub
- aks(Azure Kubernetes service)
- Jenkins
- Docker
データフロー
- ユーザーがコードを修正してGitHubにコミットする
- GitHubにコミットされたことでJenkins build Triggerが動作する
- AKSを使ってビルドジョブがトリガーする
- JenkinsがDockerコンテナーをビルドし、ACRにPushする
- JenkinsがPushしたコンテナーをACRがAKSにデプロイする
上記の構成通り、CICD環境構築に取り組んでいきます。