【入門編】GitLab Runnerを自前サーバーに構築する方法:Docker版で環境を爆速化 – バージョン管理・CI/CD活用バイブル

こんにちは!日々の開発、本当にお疲れ様です。
「GitLabの共有Runner、なんだかいつもビルド待ちが発生していらいらする……」「うちのプロジェクト特有のビルドツールやキャッシュをサクサク動かしたい!」そんな風に思ったことはありませんか?

今回は、あなたの自前サーバー(オンプレミスやクラウドの仮想マシン)に、Docker版の「GitLab Runner」を爆速で構築する方法を徹底解説します。

これをマスターすれば、ビルド待ちのストレスから解放されるだけでなく、あなた専用のパワフルなCI/CD環境が手に入り、毎日の開発が劇的に楽になりますよ。さあ、一緒にモダンで快適な自動化の世界へ足を踏み入れましょう!

—

なぜ「自前(プライベート)Runner」が必要なのか?

GitLabには、最初から利用できる「共有Runner(Shared Runner)」が用意されています。これらは手軽で便利なのですが、チームや他のユーザーとリソースを共有するため、ピーク時には「ビルドがキュー(待機列)に入ったまま全然始まらない……」というボトルネックが発生しがちです。

ここで、自前サーバーに専用のRunner(Specific Runner / 自前Runner)を構築するメリットを見てみましょう。

1. 爆速のビルド開始: 待機列なし。トリガーした瞬間からビルドが走り始めます。
2. 環境の完全コントロール: 必要な言語のランタイムや、社内ニッチなツール、特殊なライブラリを自由自在にインプットできます。
3. セキュリティとコストの最適化: 機密情報を扱うビルドをクローズドな環境で完結させたり、クラウドの共有Runnerの利用時間制限を気にせず使えます。

Docker版を使うことで、OSを汚さず、クリーンで再現性の高いビルド環境を瞬時に作ることができます。それでは、具体的な手順を見ていきましょう!

—

ステップ1:GitLab Runnerのインストール(Docker版)

今回の主役はDockerです。ホストOS(サーバー)にDockerがすでにインストールされている前提で進めます。

まずは、Runnerの設定やデータを永続化するためのDockerボリュームを作成し、公式のGitLab Runnerコンテナを起動します。

ターミナルを開き、以下のコマンドを叩いてみてください。

1. 設定ファイルを保存するDockerボリュームを作成
docker volume create gitlab-runner-config

2. GitLab Runnerのコンテナをデーモンとして起動
docker run -d \
–name gitlab-runner \
–restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v gitlab-runner-config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest

ここがポイント!
`-v /var/run/docker.sock:/var/run/docker.sock` という設定が非常に重要です。これは「コンテナの中から、ホスト側のDockerエンジンを操作できるようにする」ための魔法の呪文です。これによって、「Dockerの中でさらにDockerコンテナを立ち上げてビルドする(Docker-in-Docker)」という、非常にクリーンでモダンなCI/CDパイプラインが実現できます。

—

ステップ2:GitLabとRunnerを紐付ける(登録作業)

コンテナが立ち上がったら、次はあなたのGitLabプロジェクトとこのRunnerをペアリング(登録)します。

1. 登録トークンの取得

GitLabのプロジェクト画面を開き、左メニューから [設定 (Settings)] > [CI/CD] を展開します。
その中の [Runners] セクションを開き、[新しいプロジェクトRunnerを作成 (New project runner)] ボタンをクリックします。
(タグやプラットフォームを設定して進めると、「登録トークン(Registration Token / glrt-…)」が表示されます。これをコピーしておいてください)

2. コンテナ内から登録コマンドを実行

先ほど立てたDockerコンテナの中にログインして、登録作業を行います。以下のコマンドを実行してください。

docker exec -it gitlab-runner gitlab-runner register

コマンドを実行すると、対話形式でいくつか質問されます。以下のように入力していきましょう。

1. GitLabのURLを入力 (例: GitLab Self-managedの場合はそのURL、GitLab.comなら https://gitlab.com)
Please enter the gitlab-ci coordinator URL:
https://gitlab.com

2. 先ほどコピーした登録トークンを入力
Please enter the gitlab-ci token for this runner:
glrt-xxxxxxxxxxxxxxxxxxxx

3. このRunnerの説明 (なんでもOKです)
Please enter the gitlab-ci description for this runner:
[hostname]: my-lightning-fast-runner

4. タグを入力 (パイプライン側でこのRunnerを指定するためのキーワード。例: docker, production)
Please enter the gitlab-ci tags for this runner (comma separated):
docker-runner

5. オプションのメンテナンスノート
Please enter the gitlab-ci optional maintenance note:
My local docker runner for fast CI

6. 【最重要】エグゼキューター(実行環境)の選択
Docker版の恩恵を最大限受けるために “docker” を入力します!
Please enter the executor:
docker

7. デフォルトで使用するDockerイメージ (何もないときのフォールバック)
Please enter the default Docker image (e.g. ruby:3.0):
ubuntu:22.04

「Runner registered successfully.」と表示されたら、ペアリング大成功です!GitLabの画面に戻ると、緑色のマークが点灯し、無事にRunnerが認識されていることが確認できます。

—

ステップ3:セキュリティ設定の注意点(超重要)

自前サーバーでDocker Runnerを動かす場合、セキュリティ面で絶対に押さえておかなければならない注意点が1つあります。

先ほど設定した `-v /var/run/docker.sock:/var/run/docker.sock` ですが、これは「ホストOSのDockerデーモンへのフルアクセス権をコンテナに与える」ことを意味します。もし悪意のあるコードがCI/CDパイプラインに混入した場合、ホストサーバー自体が乗っ取られるリスクがあります。

安全な運用を守るためのベストプラクティス:

  • 公開リポジトリでは慎重に: 誰でもマージリクエストを送れるオープンなプロジェクトでこの構成にする場合は、誰がパイプラインを実行できるか(権限管理)を厳しく制限してください。
  • 専用の仮想マシン(VM)を切り出す: 本番環境のサーバーや、他の重要なサービスが動いているホスト上で直接Runnerを動かすのは避け、CI専用の使い捨て可能な軽量VM(AWS EC2やGoogle Compute Engineなど)の上でコンテナを動かすのがプロの鉄則です。

—

ステップ4:精度高い「HelloWorld」で動作確認!

さあ、いよいよ自前Runnerが正しく動くかテストしてみましょう。
プロジェクトのルートディレクトリに `.gitlab-ci.yml` というファイルを作成し、以下のコードを書き込んでコミット&プッシュしてください。

.gitlab-ci.yml

使用するステージの定義
stages:

  • test

ジョブの定義
hello_world_job:
stage: test
# 先ほど登録時に指定したタグを設定し、この自前Runnerで実行させる
tags:

  • docker-runner

# 軽量なAlpine Linuxのイメージを指定
image: alpine:latest
script:

  • echo “==========================================”
  • echo “🎉 おめでとうございます!自前Runnerが動いています!”
  • echo “==========================================”
  • uname -a
  • apk update && apk add curl
  • echo “インターネット接続もバッチリです。”

動作確認の流れ

1. 上記のファイルをGitLabにプッシュします。
2. プロジェクトの [ビルド (Build)] > [パイプライン (Pipelines)] を覗いてみてください。
3. 共有Runnerの順番待ちを一切挟むことなく、一瞬でジョブが「Running」になり、数秒で「Passed」に変わるはずです!
4. ジョブのログを開いて、お馴染みのメッセージと `uname -a` の結果が表示されていれば、爆速CI環境の完成です。

—

おわりに

お疲れ様でした!これで、あなた専用のパワフルかつクリーンなDocker版GitLab Runnerの構築が完了しました。

自前Runnerを手に入れたことで、重たいテストコンテナのキャッシュ戦略、複雑なビルドフロー、社内ニッチなツールとの連携など、CI/CDの可能性は無限大に広がります。

「毎日の作業が劇的に楽になる」その感覚を、ぜひチームのメンバーとも共有して、さらに開発スピードを加速させていってくださいね。それでは、良きCI/CDライフを!

タイトルとURLをコピーしました