Dockerを用いたGitLab Runnerのオンプレミス構築

ローカルPCにてDockerで構築したGitLab Runnerを登録する方法を記載しています.

目次

前提

本記事ではDockerを利用したGitLab Runnerを構築するため,Dockerをインストールが必要です.

一般的なRootful Dockerのインストール方法は公式サイトを参照します.

Rootless Dockerをインストールする場合,下記記事を参考にしてください.Rootless Dockerはより安全にDockerを利用するテクニックのひとつです.

この記事では,docker-composeを使用するため,そちらもインストールが必要です.

GitLabのオンプレミス構築

今回は,GitLab.comとオンプレミスGitLab両者に対するRunnerの登録方法を記載しています.

オンプレミス構築の方法に関しては下記をご参照ください.

Dockerを用いたGitLab Runnerの導入

まず,Docker Compose用のYAML設定ファイル(docker-compose.yml)を作成します.

docker-compose.yml


version: '3'
services:
  runner:
    image: 'gitlab/gitlab-runner:latest'
    restart: always
    volumes:
      - ./srv/gitlab-runner/config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "8093:8093"

GitLab Runnerのデフォルトポートは8093です.ポートフォワーディングを利用する場合,8093にマッピングします.

次にdocker-composeコマンドでコンテナを起動します.


docker-compose up -d

docker-compose ps

NAME                COMMAND                  SERVICE             STATUS              PORTS
root-runner-1       "/usr/bin/dumb-init …"   runner              running             0.0.0.0:8093->8093/tcp, :::8093->8093/tcp

たった,これだけの作業でGitLab Runnerの構築は完了です.

続いて,GitLabにGitLab Runnerを登録します.

GitLab Runnerの登録(GitLab.com)

GitLab.comへのGitLab Runnerの登録方法を示します.

オンプレミス版のGitLabについては後述しているため,こちらから飛べます.

Specific runnerの登録

トークンの取得

GitLab.comにアクセスし,任意のリポジトリを開きます.

[設定]->[CI/CD]->[Runner]を開いて,「URL」と「トークン」を取得します.

GitLab Runnerの登録

取得したURLとトークンを用いてGitLab Runnerを登録します.

コンテナに接続し,gitlab-runner registerコマンドでGitLab Runnerを登録します.


docker exec -it root-runner-1 gitlab-runner register --non-interactive --locked=false --url=<URL> --registration-token=<token> --name=container-runner --tag-list=tag-runner --executor=docker --docker-privileged=true --docker-image=docker:20.10.15-dind

ここで,root-runner-1docker-compose psで表示されているコンテナ名です.

<URL><token>にはさきほど取得したURL(https://gitlab.com)とトークンを入力します.

注意点として,--docker--priviledged=trueを指定しない場合,Docker in Dockerでエラーが生じます.

GitLab Runnerの登録が成功すると,先ほどのGitLabの画面で「Specific runners」に登録したRunnerを確認できます.

GitLab Runnerの登録(オンプレミスGitLab)

GitLab.comではなく,オンプレミスで構築したGitLabとGitLab Runnerを連携する方法を示します.

オンプレミスGitLabの場合,Shared runnerへの登録とSpecific runnerの登録の両者が可能です.(GitLab.comの場合Shared runnerは予め用意されているものしか使用できない)

オンプレミス構築の方法に関しては下記をご参照ください.

Specific runnerの登録

Specific runnerの場合,上述したGitLab.comと同様の手順で行えるため省略します.

Shared runnerの登録

Shared runnerを用いるプロジェクトごとではなく,GitLab全体で共有されたRunnerを使用することが可能です.

プロジェクトごとにRunnerを定義する必要がないため,管理が楽になります.

トークンの取得

[Menu] > [Admin] を選択し,[Overview] > [Runner]を選択すると下記画面が表示されます.

[Registration taken]より,トークンを取得します.

GitLab Runnerの登録

トークンを取得した後の処理は,Shared runnerの登録方法と同じです.

Dockerコンテナ内のRunnerにそれぞれ<URL>と<token>を指定します.


docker exec -it root-runner-1 gitlab-runner register --non-interactive --locked=false --url=<URL> --registration-token=<token> --name=container-runner --tag-list=tag-runner --executor=docker --docker-privileged=true --docker-image=docker:20.10.15-dind

無事登録できれば下記のような画面が表示されます.

任意のプロジェクトに移行し,[Setting] > [CI/CD] > [Runner]を確認するとShared runnerに登録したRunnerが表示されます.

CI/CDの実行

次に,CI/CDを登録したDocker Runnerで実行します.

ものすごくシンプルなCI/CD用の設定ファイルを作成します.

.gitlab-ci.yml


image: docker:20.10.15

services:
  - docker:20.10.15-dind

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""

before_script:
  - docker info

test_ci:
  script:
    - docker pull alpine:latest
    - docker run alpine:latest cat /etc/alpine-release
  tags:
    - tag-runner

CI/CDではDocker in Dockerが推奨されているため,Docker in Dockerの設定です.

内容は,単純にdocker in dockerのdocker infoを表示し,alpineイメージをPullしてそのバージョンを表示するのみです.

ファイルを作成して,コミットすると自動的にテストが実行されます.

[CI/CD]->[パイプライン]から確認します.

数秒から数分待つと「実行中」から「成功」となります.無事「成功」が表示されれば設定完了です.

実行結果確認

テストの実行結果を確認してみます.

パイプラインから,#から始まるジョブ番号をクリックします.

ジョブを開くと,.gitlab-ci.ymlで作成した「Test」が確認できます

「test_ci」をクリックすると作成したスクリプトの結果が表示されています.

ここまで確認できれば,GitLab Runnerの設定は完了です.

よかったらシェアしてね!
目次