GitLabをコンテナで動かす手順(CI/CD有効化まで)

この記事は約11分で読めます。
スポンサーリンク

GitLabそのものをDockerコンテナで動かす手順を紹介します。

とりあえずCI/CDまで動作確認をしました(つまりRunnerも入れます)。

前提

確認した環境:

  • OS:Centos7
  • Docker:19.03.12

事前にdocker-composeを入れておいてください。

参考にさせていただいたサイト

https://qiita.com/str416yb/items/2932052a6ead78c167e4

GitLab単体をdocker-composeを使用して稼働させる手順が紹介されています。

https://qiita.com/n11sh1/items/f44764c74aca5c3bcfa1

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をメモ。

URLはdockerホストのIPになっていますが、Runnerとの接続はコンテナ間接続になるので、Docker DNSで名前解決する名前を使用する。なので、このURLとは違う名前を設定します。後述します。

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を起動するときに名前解決でエラーになる。

Running with gitlab-runner 11.1.0 (081978aa)
  on 64a46551905e c4sjwD8J
Using Docker executor with image alpine:latest ...
Pulling docker image alpine:latest ...
Using docker image sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e for alpine:latest ...
section_start:1599040709:prepare_script
Running on runner-c4sjwD8J-project-2-concurrent-0 via 64a46551905e...
section_end:1599040711:prepare_script
section_start:1599040711:get_sources
Cloning repository...
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
ERROR: 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を使用できるはずです。

コメント

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