自分で構築したGitLabにGitLab Runnerを設定する手順のまとめです。
Gitlabを構築する下記記事の続きになります。
やりたいこと
- オンプレミス環境に構築したGitLabから利用するRunnerとして設定する
- スモールスタートとしてGitLabと同じサーバー内に構築する
- GitLabの共有Runnerとして設定する
- executorにはDockerを利用する
Dockerのインストール
まずはDockerをインストールし、利用できるようにしておきます。
特に難しいこともないので、下記公式の手順に従ってインストールしてください。
下記のようにdockerコマンドが利用できるようになっていればOKです。
$ docker -v
Docker version 20.10.18, build b40c2f6
$ docker compose version
Docker Compose version v2.10.2
内部通信の為のホスト設定①
RunnerからGitLabへアクセスする為のURLは、同じサーバー内からのアクセスになるので、普通ならhttp://localhost/
となります。
Runner自体からGitLabへアクセスするケースであればhttp://localhost/
で良いのですが、
Runnerが利用するDockerコンテナ内からGitLabへアクセスするケースはhttp://localhost/
ではアクセスが通りません。
※Dockerコンテナ内のポート80にアクセスすることになってしまう為。
その為、localhostとは別のホスト名を設定しておき、環境によってアクセス先(IP)を変えられるようにします。
$ sudo vim /etc/hosts
127.0.0.1 localhost gitlab ←gitlabをエイリアスとして追加。
※ここではgitlabとしていますが、任意の名前で良いです。
サーバー内からのアクセス先は127.0.0.1
で良いので、localhost
のエイリアスとして設定します。
試しに、http://gitlab/
でもGitLabにアクセスできることを確認しておきます。
$ curl http://gitlab/-/health
GitLab OK
localhost
と同様にヘルスチェックが通ればOKです。
GitLab Runnerのインストール
公式の手順通りではありますが、パッケージのリポジトリを登録してapt
コマンドでインストールします。
$ curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
$ sudo apt install gitlab-runner
バージョンを確認。
$ gitlab-runner -version
Version: 15.4.0
Git revision: 43b2dc3d
Git branch: 15-4-stable
GO version: go1.17.9
Built: 2022-09-20T22:38:36+0000
OS/Arch: linux/amd64
ステータスを確認。
Service is running
になっていればOKです。
$ sudo gitlab-runner status
Runtime platform arch=amd64 os=linux pid=2989579 revision=43b2dc3d version=15.4.0
gitlab-runner: Service is running
GitLabにRunnerを登録
GitLabの管理者ページのRunnerの設定を開きます。
「Register an instance runner」をクリックし、登録の為のトークンを取得します。
次にGitLab Runnerに対して登録作業を行います。
$ sudo gitlab-runner register
Runtime platform arch=amd64 os=linux pid=3043759 revision=43b2dc3d version=15.4.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://gitlab/ ←先ほど設定したホスト名(gitlab)を指定
Enter the registration token:
XXXX ←先ほど取得したトークン
Enter a description for the runner:
[gitlab-vm]: Shared-Runner1 ←登録するRunnerの説明
Enter tags for the runner (comma-separated):
shared ←登録するRunnerのタグ
Enter optional maintenance note for the runner:
←メンテナンスノート(省略ならそのままEnter
Registering runner... succeeded runner=K6rhar1C
Enter an executor: kubernetes, docker-ssh, shell, virtualbox, docker-ssh+machine, docker+machine, custom, docker, parallels, ssh:
docker ←利用するexecutor
Enter the default Docker image (for example, ruby:2.7):
node:16 ←デフォルトのDockerImage
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
これで登録できました。
GitLabのRunnerのページで下記のように追加されていればOKです。
あとこれは任意ですが、登録したRunnerの設定を1点変更します。
登録したRunnerの編集を選択して、「タグのないジョブの実行」を許可しておきます。
これを許可していない場合、ジョブを登録する際に明示的にタグ(今回の設定だとshared)を指定しないと、このRunnerは実行してくれません。
内部通信の為のホスト設定②
最後にRunnerが利用するDokerからの内部通信の設定を行います。
まずは下記コマンドでDockerが使用するネットワークでのホスト側のIPアドレスを調べます。
docker0:
となっているものが対象で、下記の場合は172.17.0.1
になります。
$ ip a
...
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:29:6e:d3:df brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:29ff:fe6e:d3df/64 scope link
valid_lft forever preferred_lft forever
次にGitLab Runnerの設定を変更します。
$ sudo vim /etc/gitlab-runner/config.toml
[runners.docker]
tls_verify = false
image = "node:16"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
extra_hosts = ["gitlab:host-gateway"] # ←追加
2022/11/03追記
IPの代わりにhost-gateway
と指定すれば良いらしいので修正。
こうすることで、http://gitlab/
とアクセスする際に、
- サーバー内からのアクセスなら
127.0.0.1
- Dockerコンテナ内からのアクセスなら
172.17.0.1
としてアクセスするようになります。
これでGitLab RunnerでCI/CDが利用できるようになりました。
続いて、JOBを並列(Runnerを複数同時)実行できるように設定を行いたい方は下記にお進みください。