GitLab CI/CD 〜 Git と一体化した CI/CD の仕組み 〜 

これまで CI/CDの基礎や Jenkins について紹介してきました。本シリーズでは、Gitと密接に連携するGitLab CI/CDについて解説します。(※CI/CDやJenkinsの概念をより深く理解するために、注釈部分や過去の記事をご参照ください。) 

GitLab CI/CD とは? 

GitLab CI/CDは、GitLabに最初から搭載されているCI/CD機能です。ソースコードをGitLabにプッシュすると、自動的にビルドやテスト、デプロイが実行されます。 
つまり、Gitでのコード管理とCI/CDを一つのツールで完結できる点が、GitLabの大きな特徴です。 

GitLab CI/CD全体の流れ 

GitLab CI/CD は、以下のような流れで動作します。 

1. 開発者がコードをGitLabにプッシュします。 

2. GitLab CI/CD が自動的にパイプライン(Pipeline)を開始します。 

3. パイプライン内でジョブ(Job)が順次実行されます。 

4. ビルド、テスト、デプロイが自動で行われます。 

パイプライン、ステージ(Stage)、ジョブと.gitlab-ci.ymlの関係を読み解くGitLab CI/CDの仕組み 

.gitlab-ci.yml とは? 

.gitlab-ci.ymlは、GitLab CI/CDのすべての動作を定義する設定ファイルです。 

このファイルがリポジトリのルートに存在すると、GitLabは自動的にCI/CDを有効化します。 

パイプライン、ステージ、ジョブはすべてこのファイルで定義されます。 

例: 

image: maven:3.8.5-openjdk-17 

stages: 

  - build 

  - test 

  - deploy 

build_app: 

  stage: build 

  script: 

    - mvn clean package -DskipTests 

  artifacts: 

    paths: 

      - target/*.jar 

run_tests: 

  stage: test 

  script: 

    - mvn test 

deploy_production: 

  stage: deploy 

  script: 

    - echo "本番サーバーに target/*.jar ファイルをデプロイしています…" 

  only: 

    - main 

パイプラインと .gitlab-ci.yml 

パイプラインは、.gitlab-ci.ymlに定義されたステージとジョブをまとめた処理の流れです。.gitlab-ci.ymlファイルの例にあるように、build → test → deployは1つのパイプラインとなっています。 

ステージと .gitlab-ci.yml 

ステージは、パイプラインを構成する処理の段階です。ステージは、ジョブの実行順序を決める役割を担っています。 

stagesキーワードによって順番を定義します。 

例: 

stages: 

  - build 

  - test 

  - deploy 

ジョブと .gitlab-ci.yml 

ジョブは、実際にコマンドを実行する 最小単位の処理 です。各ジョブはどのステージに属するか、何を実行するかを定義します。 

例: 

build_app: 

  stage: build 

  script: 

    - mvn clean package -DskipTests 

  artifacts: 

    paths: 

      - target/*.jar 

まとめ 

本記事では、GitLab CI/CDにおけるパイプライン、ステージ、ジョブの関係について、設定ファイル(.gitlab-ci.yml)を用いて解説しています。 

GitLab CI/CDは、コードをGitにプッシュするだけで、ビルド、テスト、デプロイが自動実行される仕組みを提供しています。 

その中核をなすのは.gitlab-ci.yml であり、このファイルを理解することがGitLab CI/CDを使いこなすための第一歩と言えます。 

次回は、CI/CDと相性の良い技術であるDockerに焦点を当て、その詳細について解説していきます。 

注釈 

CI/CDはソフトウェア開発における自動化の重要なプラクティスです。 

CI(Continuous Integration:継続的インテグレーション) 

  • 開発者がコードを頻繁に共有リポジトリに統合。 
  • 自動ビルドとテストを実行し、品質を担保。 
  • 目的:早期にバグを発見し、統合の問題を減らす。 

CD(Continuous Delivery/Deployment:継続的デリバリー/デプロイメント) 

  • デリバリー:テスト済みコードを本番環境にデプロイ可能な状態に自動化。 
  • デプロイメント:本番環境への自動デプロイまで含む。 
  • 目的:リリースの迅速化と信頼性向上。 

Jenkins 

オープンソースの CI/CD ツールです。ビルド、テスト、デプロイなどの作業を 自動化 することができます。 

参考資料: