docker-composeを使ってGitLab / Runner のローカル環境
はじめに
タイトルどおり、docker-composeを使ってGitLabおよびGitLab Runnerをローカル環境に作ります。
このへん詳しく解説した記事は点在していますが、必要最低限の情報だけ網羅したような記事がなかったので書いてみます。とりあえず難しいことを考えずに作ってみたい人向け。
前提
今回のGitLabおよびRunnerバージョン情報はこちら
GitLab information Version: 12.8.7 Revision: b679f55a199 Directory: /opt/gitlab/embedded/service/gitlab-rails DB Adapter: PostgreSQL DB Version: 10.12 URL: http://web:8929 HTTP Clone URL: http://web:8929/some-group/some-project.git SSH Clone URL: ssh://git@web:2224/some-group/some-project.git Using LDAP: no Using Omniauth: yes Omniauth Providers: GitLab Shell Version: 11.0.0 Repository storage paths: - default: /var/opt/gitlab/git-data/repositories GitLab Shell path: /opt/gitlab/embedded/service/gitlab-shell Git: /opt/gitlab/embedded/bin/git
root@gitlab-runner:/# gitlab-runner Runtime platform arch=amd64 os=linux pid=139 revision=4c96e5ad version=12.9.0 NAME: gitlab-runner - a GitLab Runner USAGE: gitlab-runner [global options] command [command options] [arguments...] VERSION: 12.9.0 (4c96e5ad)
docker-compose.ymlを作る
まずはdocker-compose.ymlを作ります。
version: '3' services: web: image: "gitlab/gitlab-ce:latest" restart: "always" hostname: "gitlab.local-docker.com" volumes: - gitlab_etc:/etc/gitlab - gitlab_log:/var/log/gitlab - gitlab_opt:/var/opt/gitlab environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://web:8929' gitlab_rails['gitlab_shell_ssh_port'] = 2224 ports: - '8929:8929' - '2224:22' runner: image: "gitlab/gitlab-runner" restart: "always" hostname: "gitlab-runner.local-docker.com" links: - web volumes: - /var/run/docker.sock:/var/run/docker.sock - ./config:/etc/gitlab-runner volumes: gitlab_etc: gitlab_log: gitlab_opt:
gitlab
コンテナと gitlab-runner
コンテナを一台ずつ立てます。
注意すべきところはHTTP接続に8929番ポートを、SSH接続に2224番ポートを使っている点。あとはrunnerの/etc/gitlab-runner
をvolumeしているので、./config/config.toml
を作って置かなければいけない(中身は多分空でもよい)。
ちなみにhostname
は環境に合わせてそれぞれ設定しましょう。
細かい注意点は他にもありますが、そのあたりは後述します。
コンテナ起動
docker-compose up -d
でコンテナを起動します。
そこそこメモリを使うし、起動までに時間がかかるので注意しましょう。
参考までに僕はWindowsのDocker in Vagrant環境を使ってVagrantにメモリを4GBくらい割り当てて、gitlabコンテナの起動にだいたい4, 5分くらいかかっています。
docker-compose logs
しながら見守りましょう。
ちなみに初期化処理中にGitLabにHTTPでアクセスしようとすると502エラーが出ます。
GitLabにアクセス
初期化処理が完了したらGitLabにアクセスします。ポート番号はさっきあったように8929番です。今回の場合はhttp://gitlab.local-docker.com:8929
ですね。
はじめてアクセスする際は「rootアカウントのパスワード設定してね」の画面になるので、適切なパスワードを設定してください。設定後はアカウント名"root"でログインできます。
プロジェクトを作成
ログイン後は通常通りGitLabを使えるのでテスト用のプロジェクトをひとつ作成し、ホスト側でクローンしてみましょう。
ちなみにここからクローン時のURLをコピーできますが、web
はrunner
コンテナでのみ使えるドメインなのでこのURLをそのまま使うことはできません。
今回の場合はweb
をgitlab.local-docker.com
に読み替えて登録しましょう。(これが面倒な場合はdocker-compose.yml
のservice名やlinks
の設定を良しなにしてください)
Runnerの登録
あわせてRunnerの設定もしておきます。
まずは事前にRunner登録用トークンを取得しましょう。どのプロジェクトでも使用できる共有Runnerなら管理者設定 > Runnerから、特定プロジェクトで使用するSpecific Runnerならプロジェクトの設定 > CI/CD > Runnerから取得できます。
Runnerの登録はgitlab-runner
コンテナから行います。docker-compose exec runner bash
からコンテナの中に入りましょう。
コンテナにはgitlab-runner
コマンドがインストールされているので、
gitlab-runner register
で登録を行います。対話形式で設定できるので適宜設定しましょう。
root@gitlab-runner:/# gitlab-runner register Runtime platform arch=amd64 os=linux pid=116 revision=4c96e5ad version=12.9.0 Running in system-mode. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): http://web:8929/ Please enter the gitlab-ci token for this runner: VUzzjtqsZYyxjmB1McBn Please enter the gitlab-ci description for this runner: [gitlab-runner.local-docker.com]: my-runner Please enter the gitlab-ci tags for this runner (comma separated): default Registering runner... succeeded runner=VUzzjtqs Please enter the executor: custom, shell, docker+machine, kubernetes, docker, docker-ssh, parallels, ssh, virtualbox, docker-ssh+machine: shell Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
途中で聞かれるタグ名はあとでCIの設定をする際に使用します。好きに設定してよいですが、よくわからなければdefault
などとしましょう。
設定が完了したらconfig.toml
の設定が書き換わります。
check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "my-runner" url = "http://web:8929/" token = "Mq4Po9ssGs4GAyPLqxvu" executor = "shell" [runners.custom_build_dir] [runners.cache] [runners.cache.s3] [runners.cache.gcs]
また、GitLab側にもRunnerが登録されているので確認してみてください。
パイプラインを実行してみる
Runnerが登録できたのでPipelineを実行することができます。
試しにやってみましょう。
下記のような.gitlab-ci.yml
をテスト用リポジトリにコミットします。
job1: stage: deploy tags: - default script: - echo "test"
ここでは.gitlab-ci.yml
の書き方について詳しく説明しませんが、これで"test"とechoするだけのジョブ job1
ができます。tags
にdefault
を設定しているので、同じくdefault
タグに対応する先程のRunnerで実行されます。
ジョブの実行タイミングを特に指定していないため、リポジトリにpushしたタイミングでパイプラインが走り、無事にjob1
が実行されているはずです。お疲れさまでした。