GitLabそのものをDockerコンテナで動かす手順を紹介します。
とりあえずCI/CDまで動作確認をしました(つまりRunnerも入れます)。
前提
確認した環境:
- OS:Centos7
- Docker:19.03.12
事前にdocker-composeを入れておいてください。
参考にさせていただいたサイト
GitLab単体をdocker-composeを使用して稼働させる手順が紹介されています。
CIを動かすRunnerのDocker化が紹介されています。
上記の2つの手順を組み合わせることで殆ど実現できるのですが、GitLabとRunnerのコンテナ間通信を実現するために少し細かい設定が必要だったので、今回まとめて紹介します。
手順
では、いきます。
まずはdocker-compose
以下をそのまま使用して動くはず。
version: '3.7'
services:
gitLab:
image: gitlab/gitlab-ce:latest
ports:
- "80:80"
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
runner:
restart: always
image: gitlab/gitlab-runner:v11.1.0
volumes:
- /home/docker/gitlab_ci/runner:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
- /etc/ssl/certs:/etc/ssl/certs
上記をdocker-composeを使用して動かすと、GitLabとRunnerのコンテナが動きます。
(つまり、上記のファイルを格納しているディレクトリで「docker-compose up -d 」を実行)
[root@docker gitlab-and-runner]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d367921735e gitlab/gitlab-ce:latest "/assets/wrapper" 2 hours ago Up About an hour (healthy) 22/tcp, 443/tcp, 0.0.0.0:80->80/tcp gitlab-and-runner_gitLab_1
2db8a41204b8 gitlab/gitlab-runner:v11.1.0 "/usr/bin/dumb-init …" 2 hours ago Up About an hour gitlab-and-runner_runner_1
動作を確認する。
GitLabにアクセスして、Runnerを設定する際の情報を取得
まず5分くらい待つ。GitLabのページにアクセスするまでに初期化に時間がかかります。
そして「http://dockerホストのIP」にアクセスする。
初回のadminパスワードを設定し、admin(root)でログインする。
adminじゃなくてrootね!root!
上のAdmin Areaアイコンをクリックし、Runnersをクリック(以下スクショ参照)
右の「Set up a shared Runner Manually」のtokenをメモ。
Dockerネットワーク名を取得
Dockerホストで以下を実行。
[root@docker gitlab-and-runner]# docker network ls
NETWORK ID NAME DRIVER SCOPE
b9176047fb5c bridge bridge local
0bd4fc22135e gitlab-and-runner_default bridge local
2bbbd2605b26 host host local
8aa028e96d43 none null local
Gitlab/Runnerは「gtlab-and-runner_default」という名前だと確認できます。メモっておきます。
RunnerをGitLabに登録
Runnerコンテナに入ります。
[root@docker gitlab-and-runner]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3aafff2955c3 gitlab/gitlab-ce:latest "/assets/wrapper" 10 minutes ago Up 10 minutes (healthy) 22/tcp, 443/tcp, 0.0.0.0:80->80/tcp gitlab-and-runner_gitLab_1
64a46551905e gitlab/gitlab-runner:v11.1.0 "/usr/bin/dumb-init …" 10 minutes ago Up 10 minutes gitlab-and-runner_runner_1
[root@docker gitlab-and-runner]# docker exec -it 64a46551905e bash
root@64a46551905e:/#
gitlab-runner registerコマンドでGitLab(コンテナ)を登録します。
root@64a46551905e:/# gitlab-runner register
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitLab/
Please enter the gitlab-ci token for this runner:
LDz9ciJ5K5g5c-rfCJj8
Please enter the gitlab-ci description for this runner:
[64a46551905e]:
Please enter the gitlab-ci tags for this runner (comma separated):
runner1
Registering runner... succeeded runner=LDz9ciJ5
Please enter the executor: parallels, shell, docker-ssh+machine, kubernetes, docker, docker-ssh, ssh, virtualbox, docker+machine:
docker
Please enter the default Docker image (e.g. ruby:2.1):
alpine:latest
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
URLに「http://gitLab/」を入力しているのがポイント。
で、ここで終わりではありません。
/etc/gitlab-runner/config.tomlを編集します。
root@64a46551905e:/# vi /etc/gitlab-runner/config.toml
先程メモったDockerネットワーク名を、以下のように追記します。
[[runners]]
name = "64a46551905e"
url = "http://gitLab/"
token = "c4sjwD8JC3WHQ_M8yyJx"
executor = "docker"
[runners.docker]
tls_verify = false
image = "alpine:latest"
privileged = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
network_mode = "gitlab-and-runner_default"
[runners.cache]
下から2行目です。修正するのはこれだけです。
ちなみに、これをやらないとRunnerがdockerを起動するときに名前解決でエラーになる。
[0KRunning with gitlab-runner 11.1.0 (081978aa)
[0;m[0K on 64a46551905e c4sjwD8J
[0;m[0KUsing Docker executor with image alpine:latest ...
[0;m[0KPulling docker image alpine:latest ...
[0;m[0KUsing docker image sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e for alpine:latest ...
[0;msection_start:1599040709:prepare_script
[0KRunning on runner-c4sjwD8J-project-2-concurrent-0 via 64a46551905e...
section_end:1599040711:prepare_script
[0Ksection_start:1599040711:get_sources
[0K[32;1mCloning repository...[0;m
Cloning into '/builds/root/runner-test'...
fatal: unable to access 'http://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@3aafff2955c3/root/runner-test.git/': Could not resolve host: 3aafff2955c3
section_end:1599040712:get_sources
[0K[31;1mERROR: Job failed: exit code 1
普通にコンテナに入って名前解決は出来るのに・・・
設定が終わったら一旦「docker-compose stop && docker-compose start」でコンテナを起動し直す。(Dockerホストで)
GitLab側の設定
最後に、GitLab側のRunnerを設定します。
先程のページを更新すると、Runnerが追加されているはず。
上記のRunner名をクリックします。
「Run untagged jobs」にチェック、「Lock to current projects」のチェックを外して「Save」。
これでRunnerを使用できるはずです。
コメント