はじめに
前回の記事はこちら↓
CI/CDの概要について学びました。
今回は
- なぜCI/CDが必要なのか(メリット)
- 具体的なフロー(どのように仕組みを取り入れるのか?)
をまとめていきます!
前回に引き続き、完全に自分用アウトプットです🙏
ゴール
- CI/CDがどんな時に役立つのかがイメージできる
- CI/CDを導入するメリットがわかる
- CI/CDを使う時の全体像がつかめる
この記事を読み終わったら、自分の開発にCI/CDを取り入れるイメージが持てるのを目指します!
なぜCI/CDが必要なのか?
前回、CI/CDは「自動でテストして品質を守り、テストを通過したらリリースに向けて自動で準備(もしくは自動でリリース)し効率を上げる」仕組みのことだと学びました。
もし、テスト〜リリースまでを人間が行うと、
- テストのチェックミスにより、プログラムに欠陥があるままリリースしてしまった
- テストをする人によって品質に差が生まれてしまった
- リリース作業までの手順書作成やフローで時間と手間がかかる
- リリース中にミスがあった!
などヒューマンエラーの可能性が大きくなることが考えられます。
一方、CI/CDを使うことによって
- pushするだけでテストとデプロイが自動化できる!
- 一定のテスト基準でバグを検知することができ、品質が保たれる
- 開発スピードが上がって効率的
というメリットが考えられます。
また、参考サイトには下記のようにありました。
ずっと昔のシステムでは、「一度作ったらプログラムは変更しない。」という環境もあったかと思います。その場合、1回しかデプロイ(プログラムを展開する)しないので、別に自動的にリリースする必要はありません。
むしろ、仕組みを作るのが面倒(かもしれない)ので、手作業で頑張ってプログラムをリリースするというのが一般的であったような気がします。ただ、現状ビジネスを勝ち抜くためには、お客さまや利用者の声を聴いてプログラム(サービス)をアップデートしていく必要があります。そのためには頻繁にリリースを実施していく必要があります。
昔よりも、一つのシステムに関してアップデート(リリース)が必要になったこと、
さらに、社会的にどんどんシステムをリリースしていくようなスピード感についていくためにCI/CDはあった方が良さそうです💡
CI/CDの使い方
では、実際にCI/CDを行う際はどのようなフローになるでしょうか?
参考サイトには下記のようにありました。
方法1:Kubernetes(k8s)+ Jenkinsを利用する
Kubernetes、もしくはそれに準するツール(OpenShift やAWSの場合EKS)+ Jenkinsを利用してCICDを実現する。
方法2:パブリッククラウドの機能を利用する。
この辺りを噛み砕きたく、GPTにも聞いてみたところ初心者向けになったのでまとめてみます🐣
▼方法① 自分で環境を組むパターン(Kubernetes(k8s)+ Jenkinsなど)
-
Kubernetes (クーバネティス)
コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープンソースのプラットフォーム(コンテナをまとめて管理・自動でスケールしてくれる仕組み) -
Jenkins(ジェンキンス)
定番のCI/CDツール。ジョブ(ビルド・テスト・デプロイの流れ)を自由に組める
🔸メリット
- 柔軟にカスタマイズ可能
- 大規模なシステムでよく使われる
- セットアップや運用はやや難しい
学習コストが高そうですし、パッと始められるものではないようです。
▼方法② クラウドサービスを使うパターン
AWSの例
- CodePipeline:パイプライン全体を管理
- CodeBuild:コードのビルドやテスト
- CodeDeploy:アプリをサーバやECSにデプロイ
- ECR/ECS(Fargate):コンテナ管理 👈聞いたことがある!
GCPの例
- Cloud Build, Cloud Deploy
Azureの例
- Azure DevOps
🔸メリット
- サービスを取り入れるだけで導入が簡単
- インフラ運用の負担が少ない
- クラウドに依存する(ロックインリスクあり)👈このあたりは今後調べます。。
方法③ SaaS(ホスティングCI/CDサービス)を使うパターン
-
GitHub Actions + Vercel
→ フロントエンド開発者に人気。プッシュ → 自動テスト → デプロイまで一気通貫でできる
(これなら個人でもやってみることができそう…?) -
GitLab CI/CD
→ GitLabに組み込み済み。リポジトリとセットで便利 -
CircleCI, TravisCI, Render, Heroku
→ 専用サービスを契約して手軽にCI/CD環境を持てる
🔸メリット
- 設定がシンプルで学習コストが低い
- 個人開発〜中小規模のチームに向いてる
- 高度なカスタマイズはしにくい
まとめ
ここまで調べたりGPTの回答を読んで、「CI/CDって聞くと難しいイメージだったけど、案件の中のアレか!」と腹落ちしました。
Githubなら自分でも導入できそうなので、今度仕組みを作ってみたいと思います。
その際も記事にします!!
参考