【社内勉強会④】CI/CDについて
1. DevOps
DevOpsとは
DevOpsは、開発と運用を融合させたアジャイルなアプリケーション開発手法です。開発と運用のチームが密接に連携し、アプリケーションのリリースから運用、改善までのライフサイクルを通じて、高品質で迅速なアプリケーションの提供を目指します。
アプリの利便性を高めたい開発者と、安定的な運用をしたい運用者との間で対立が生じてしまうという問題を解決し、コラボレーションを促進します。
DevOpsライフサイクル
-
Plan
Planプロセスでは、アプリケーションの開発計画が立てられます。このプロセスでは、ビジネス目標や要件を定義し、プロジェクトのスケジュールや予算を策定します。 -
Code
Codeプロセスでは、プログラマーがアプリケーションのソースコードを書きます。このプロセスでは、コードの品質や保守性を高めるために、コーディング規約やベストプラクティスに従って開発が行われます。 -
Build
Buildプロセスでは、ソースコードをビルドし、実行可能なアプリケーションを作成します。このプロセスでは、自動化されたビルドプロセスを用いることが多く、ビルドエラーを早期に検知することができます。 -
Test
Testプロセスでは、アプリケーションをテストします。このプロセスでは、自動化されたテストスイートを用いてアプリケーションの品質を確保します。また、テスト結果は開発チームと運用チームで共有され、必要に応じて修正が加えられます。 -
Release
Releaseプロセスでは、リリースするアプリケーションのバージョンを定義し、リリースノートやドキュメントの作成、承認プロセスの実施などが行われます。 -
Deploy
Deployプロセスでは、アプリケーションを本番環境にデプロイします。このプロセスでは、自動化されたデプロイプロセスを用いることが多く、デプロイエラーを早期に検知することができます。 -
Operate
Operateプロセスでは、アプリケーションを運用します。運用チームは、アプリケーションの稼働状況を監視し、必要に応じて修正や改善を行います。 -
Monitor
Monitorプロセスでは、アプリケーションの稼働状況を監視し、問題が発生した場合には迅速かつ正確に対応します。このプロセスでは、監視ツールやログ解析ツールを用いて、アプリケーションの健全性を確認します。
2. CI/CD
CI(継続的インテグレーション)
DevOpsライフサイクルにおけるBuild~Testに当たります。
継続的インテグレーションとは、コードに変更が発生するたびに(継続的に)、すぐに共有ソースコードリポジトリに取り込み、自動的にテストや静的解析、セキュリティスキャン、ビルドを行う(インテグレーションする)ことです。
最終的な成果物として、コードを実行可能なモジュールにまとめたもの(アーティファクト)を提供します。
継続的インテグレーションによって、エラーやセキュリティの問題をより簡単に、開発プロセスのかなり早い段階で特定し、修正することができます。
CD(継続的デリバリー/デプロイメント)
DevOpsライフサイクルにおけるRelease~Deployに当たります。
CIプロセスにおいて、コードがテストされビルドされたら、CDは最終段階で引き継ぎ、どんな環境でもデプロイできるように必要なものをパッケージ化します。CDは、インフラストラクチャのプロビジョニング(ネットワークやコンピューティングリソースなどのリソースを提供できるよう準備すること)から、テスト環境や本番環境へのアプリケーションのデプロイまで、すべてをカバーします。
CDでは、いつでも本番環境にデプロイできるようにソフトウェアが構築されます。その後、デプロイを手動でトリガーするか、デプロイも自動化される継続的デプロイに移行することができます。
3. GitLab CI/CD
GitLabにはCI/CDを管理・実行するための機能が備わっています。
GitLab CI/CDのアーキテクチャ
Runner
Executor
GitLab CI/CDパイプラインの実行手順
-
Runnerが使用可能であることを確認する
RunnerはCI/CDジョブを実行するエージェントです。
使用可能なランナーを表示するには:
[Settings] > [CI/CD] に移動し、 [Runners] を展開します。 -
ジョブ定義の作成
.gitlab-ci.yml
ファイルを作成し、CI/CDパイプラインのジョブ定義を記述します。
.gitlab-ci.ymlのリファレンス -
コードの変更のコミットや、Marge Requestのマージ等を実行する
-
自動的にパイプラインが起動し、
.gitlab-ci.yml
に定義された各ジョブが実行される
Discussion