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

こんにちは。私はダットです。ソフトウェアエンジニアです。Javaのプログラムを作ることをしています。
プログラミングの知識や経験をみなさんにシェアするのが好きです。
このブログがあなたの役に立つとうれしいです。
これまで 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 ツールです。ビルド、テスト、デプロイなどの作業を 自動化 することができます。
参考資料:

