ローカル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-1
はdocker-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の設定は完了です.