はじめに
現場でコストをかけずにソース管理とかを行いたいと思い、GitLabの導入を検討しています。
また、環境も潤沢ではないので、Dockerを使って構築していきたいと思います。
GitLabとは?
ソースコードの管理や共同開発を効率的に行うためのオープンソースのDevOpsプラットフォームです。
前回GitLabの構築はやったので、今回はCIを実施するためのGitLabRunnerを導入していきたいと思います。
環境
Windows11
WSL
Ubuntu 24.4.1
Docker 27.4.1
GitLab v17.9.1-ee(最新)
セットアップ
Docker Compose を使ってセットアップしていきます。yamlファイルは以下の通り
services:
gitlab:
image: gitlab/gitlab-ee:latest # GitLab Enterprise Edition の最新イメージを使用
restart: always # コンテナが停止しても自動で再起動
hostname: 'gitlab.local' # コンテナのホスト名を 'gitlab.local' に設定
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.local'; # GitLab の外部 URL を設定(http でアクセス可能)
ports:
- "80:80" # ホストのポート 80 をコンテナのポート 80 にマッピング(HTTP)
- "443:443" # ホストのポート 443 をコンテナのポート 443 にマッピング(HTTPS)
- "22:22" # ホストのポート 22 をコンテナのポート 22 にマッピング(SSH)
volumes:
- ./gitlab/config:/etc/gitlab # GitLab の設定ファイルを永続化
- ./gitlab/logs:/var/log/gitlab # GitLab のログを永続化
- ./gitlab/data:/var/opt/gitlab # GitLab のデータを永続化(リポジトリなど)
networks:
- gitlab-network # GitLab 用のネットワークに接続
gitlab-runner:
image: gitlab/gitlab-runner:latest # GitLab Runner の最新イメージを使用
container_name: gitlab-runner # コンテナ名を 'gitlab-runner' に指定
restart: always # コンテナが停止しても自動で再起動
depends_on:
- gitlab # GitLab コンテナが起動してから Runner を起動
volumes:
- ./gitlab-runner/config:/etc/gitlab-runner # GitLab Runner の設定を永続化
- /var/run/docker.sock:/var/run/docker.sock # ホストの Docker をコンテナ内で操作可能にする(危険なので注意)
networks:
- gitlab-network # GitLab Runner も GitLab 用ネットワークに接続
networks:
gitlab-network:
name: gitlab-network # GitLab 専用のネットワークを作成
ここまで出来たら、
docker compose up -d
でコンテナを起動しましょう。
Runnerの設定
Runnerの登録
GitLab Runnerはプロジェクト単位に設定するようなので、
まずはグループとプロジェクトを適当に作成してください。
プロジェクトを作成したら、左のメニューの[設定]> [CI/CD]を選択
以下の画面が表示されるので、[Runnner]> [新しいプロジェクトRunner]を選択
以下の画面で、細かい設定は割愛して、画面の通りにチェックして[Runnerを作成]を選択
以下のRunnerの登録までいったら、次の作業はWSLのコマンドで実行します。
Step1Runner認証トークンをコピーしておきます。
Runnerの実行方法の登録
以下のコマンドで、Runnerの実行方法を登録します。
docker compose exec gitlab-runner gitlab-runner register \
--non-interactive \
--url http://gitlab.local \
--token glrt-t3_PCSv2jU64_31z8JyRcia \
--executor docker \
--docker-image "alpine:latest" \
--docker-network-mode "gitlab-network"
オプションの説明は以下の通りです
オプション | 説明 |
---|---|
--non-interactive |
インタラクティブではなく、非インタラクティブモードで実行します。ユーザーの入力を求めることなく、自動で設定を行います。 |
--url <URL>
|
GitLab サーバーの URL を指定します。例: http://gitlab.example.com
|
--token <TOKEN>
|
GitLab サーバーから発行された登録トークンを指定します。GitLab インスタンスに登録するために必要です。 |
--executor <EXECUTOR>
|
ジョブを実行するエグゼキュータの種類を指定します。例: docker 、shell など。 |
--docker-image <IMAGE>
|
使用する Docker イメージを指定します。例: alpine:latest
|
--docker-network-mode <MODE>
|
Docker コンテナのネットワークモードを指定します。例: gitlab-network
|
登録がうまくいくと
のように画面が変わります。変わらない場合、はStep3のコマンドを実行してみましょう
docker compose exec gitlab-runner gitlab-runner register
元のCI/CDの設定画面を表示すると、以下の通りRunnerが作成されました。
実際にビルドしてみる
設定ファイルを作成する
ビルドするためには、プロジェクト直下に、「.gitlab-ci.yml」ファイルを作成しましょう
※細かい設定値はここでは割愛
stages:
- message
message:
stage: message
script:
- echo "パイプラインが実行されました!"
このファイルを登録すると、勝手にRunnerが動き出します。
実行結果を確認しましょう
ジョブの結果を見ると、無事echoが実行されたことが分かります。
さいごに
Jenkinsとかと比べると若干手間はかかりましたが、無事ビルドできる環境までは整いました。
後は、.gitlab-ci.ymlの記述方法とか制約とかをちゃんと理解して、プロジェクトに適用していきたいと思います。
おまけ
ビルドの途中で成果物を保存しようとすると、アーティファクトを有効化しておく必要があります。
設定ファイルに以下を追加します。
gitlab_rails['artifacts_enabled'] = true
修正が完了したら、以下のコマンドをGitlab Runner側のコンテナで実行します
docker compose exec gitlab gitlab-ctl reconfigure
docker compose exec gitlab gitlab-ctl restart