🔄

【社内勉強会④】CI/CDについて

2023/11/09に公開

1. DevOps

DevOpsとは

DevOpsは、開発と運用を融合させたアジャイルなアプリケーション開発手法です。開発と運用のチームが密接に連携し、アプリケーションのリリースから運用、改善までのライフサイクルを通じて、高品質で迅速なアプリケーションの提供を目指します。
アプリの利便性を高めたい開発者と、安定的な運用をしたい運用者との間で対立が生じてしまうという問題を解決し、コラボレーションを促進します。

DevOpsライフサイクル

DevOpsライフサイクル

  1. Plan
    Planプロセスでは、アプリケーションの開発計画が立てられます。このプロセスでは、ビジネス目標や要件を定義し、プロジェクトのスケジュールや予算を策定します。

  2. Code
    Codeプロセスでは、プログラマーがアプリケーションのソースコードを書きます。このプロセスでは、コードの品質や保守性を高めるために、コーディング規約やベストプラクティスに従って開発が行われます。

  3. Build
    Buildプロセスでは、ソースコードをビルドし、実行可能なアプリケーションを作成します。このプロセスでは、自動化されたビルドプロセスを用いることが多く、ビルドエラーを早期に検知することができます。

  4. Test
    Testプロセスでは、アプリケーションをテストします。このプロセスでは、自動化されたテストスイートを用いてアプリケーションの品質を確保します。また、テスト結果は開発チームと運用チームで共有され、必要に応じて修正が加えられます。

  5. Release
    Releaseプロセスでは、リリースするアプリケーションのバージョンを定義し、リリースノートやドキュメントの作成、承認プロセスの実施などが行われます。

  6. Deploy
    Deployプロセスでは、アプリケーションを本番環境にデプロイします。このプロセスでは、自動化されたデプロイプロセスを用いることが多く、デプロイエラーを早期に検知することができます。

  7. Operate
    Operateプロセスでは、アプリケーションを運用します。運用チームは、アプリケーションの稼働状況を監視し、必要に応じて修正や改善を行います。

  8. 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パイプラインの実行手順

  1. Runnerが使用可能であることを確認する
    RunnerはCI/CDジョブを実行するエージェントです。
    使用可能なランナーを表示するには:
    [Settings] > [CI/CD] に移動し、 [Runners] を展開します。

  2. ジョブ定義の作成
    .gitlab-ci.ymlファイルを作成し、CI/CDパイプラインのジョブ定義を記述します。
    .gitlab-ci.ymlのリファレンス

  3. コードの変更のコミットや、Marge Requestのマージ等を実行する

  4. 自動的にパイプラインが起動し、.gitlab-ci.ymlに定義された各ジョブが実行される

Discussion