はじめに
GitLab-CI, GitLab-Runnerの使い方に慣れるため、ローカルに練習環境を作成しました。
その際の手順を備忘録として記事にまとめます。
Docker の知識がなくても構築できるよう、コマンドを記載しています。
この記事の手順に従ってコピペしていけば、最低限GitLab-CI を試せる環境を構築できます。
この記事を読んでできること
GitLab-CE, GitLab-Runner をローカルに立ち上げ、プロジェクトに GitLab-Runner を登録できるようになります。
以下の順番で説明をしていきます。
- Docker内でNetworkを作成
- GitLab-CE を起動
- GitLab-Runner を起動
- GitLab-Runner を登録
目指す構成
GitLab-CIの環境を構築するには、
- GitLab-CE
- GitLab-Runner
の2つを用意する必要があります。
この2つを ローカルのDockerコンテナ上に立ち上げ接続を試みます。
[gitlab-network内(独自のネットワークを作成)]
docker container 1
L GitLab-CE (IPアドレス: 172.20.0.2)
↑ 登録
docker container 2
L GitLab-runner (IPアドレス: 172.20.0.3)
Networkの作成
gitlab-ce, gitlab-runner を固定のIPアドレスで起動するために、Docker上でネットワークを作成します。
ネットワーク名は gitlab-network
とします。
docker network create --subnet 172.20.0.0/24 gitlab-network
以下のコマンドを打って、gitlab-network
が登録されていれば完了です。
docker network ls
NETWORK ID NAME DRIVER SCOPE
43c51b2c19f1 bridge bridge local
742b5bc1137d gitlab-network bridge local
79c45602280f host host local
85bda5ecf785 none null local
GitLab-CE
GitLab-CEの起動
GitLab-CE の Docker イメージを起動します。
docker run --detach --network gitlab-network --ip 172.20.0.2 --publish 443:443 --publish 80:80 --publish 22:22 --name gitlab-ce gitlab/gitlab-ce:latest
各オプションは以下のような意味を持っています。
オプション | 意味 |
---|---|
--detach | コンテナからログアウトした後もプロセスが残る |
--network [name] | コンテナをname ネットワークに登録する |
--ip [address] | ネットワーク内でコンテナにaddress IPアドレスを振る |
--publish x:y | ポートフォワーディング。ホストマシンのportx とコンテナのporty をバインドする |
--name [name] | コンテナにname 名前をつける |
GitLabにアクセス
ブラウザからGitLabにアクセスします。
今回の環境では、URLは http://localhost:80
です。
完全に起動するまで時間がかかる場合があります。
アクセスできると、ログイン画面が表示されます。
rootユーザーでログイン
ログイン画面が出たら、rootユーザーでログインします。
パスワードの確認方法はドキュメントに書いてあります。
(GitLab 14.0以降での確認方法)
docker exec gitlab-ce cat /etc/gitlab/initial_root_password
出力結果にパスワードが書いてあるので、
- ユーザー名: root
- パスワード: 確認したパスワード
を入力してログインします。
rootユーザーのパスワードを変更する
上記で使用したパスワードは時間で消えるので、rootユーザーのパスワードを変更しましょう。
ログイン後の画面から、以下のようにユーザーのパスワードを変更できます。
左上の「Menu/Admin」 => サイドバーの「User」 => Administar行の編集ボタン
プロジェクト作成
プロジェクトを1つ作成します。
New Project → Create blank Project と進みます。
今回は、プロジェクト名を ci-practice
としました。
入力したら、Create Project を押します。
新しいプロジェクトが作成されました。
のちほど、Runner 登録時に設定を確認します。
外向きのIPアドレスを固定
このあと登録するランナーに http://172.20.0.2
を通知させたいので、external_host
を追加します。
この設定をしないと、プロジェクトの「Clone」から確認できるランダムなIPアドレスが通知されます。
コンテナにログインして設定ファイルを編集しましょう。
docker exec -it gitlab-ce /bin/bash
vi /etc/gitlab/gitlab.rb
30行目くらいに # external_url 'GENERATED_EXTERNAL_URL'
というコメントがあるので、
以下のように書き加えます。
# external_url 'GENERATED_EXTERNAL_URL'
external_url 'http://172.20.0.2:80/'
設定を更新します。
gitlab-ctl reconfigure
もう一度「Clone」を確認すると、IPアドレスが変わっています。
参考: 【GitLab】IP・ポート番号のURLで使用する方法(docker)
GitLab-Runner
基本的にはドキュメントに従って登録を進めます。
GitLab-Runner の起動
GitLab-Runner の Docker イメージを起動します。
Docker 内部のgitlab-network
ネットワークで GitLab-CE にアクセスできればよいので、ポートフォワードは必要ありません。
docker run --network gitlab-network --ip 172.20.0.3 -v /var/run/docker.sock:/var/run/docker.sock --detach --name gitlab-runner gitlab/gitlab-runner:latest
URLとtokenの確認
登録に必要な URL と token を事前に確認しておきましょう。
先程ログインしたGitLabの設定から確認できます。
Settings にカーソルオーバーし、CI/CD をクリックします。
Runners の Expand をクリックすると、登録に必要な URL と tokenが確認できます。
ここで注意点としてURLが http://localhost/
となっていますが、GitLab-Runner のコンテナから localhost でアクセスすることはできません。
代わりに、固定したIPアドレス http://172.20.0.2
を使用しましょう。
GitLab-Runner の登録
GitLab-Runner のコンテナ内に入り、登録を行います。
登録は対話モードで行います。
docker exec -it gitlab-runner /bin/bash
gitlab-runner register
以下は対話モードに従って入力していきます。
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://172.20.0.2
Enter the registration token:
rTxCp61E5PuzCkKgaD3P
Enter a description for the runner:
local-runner
Enter tags for the runner (comma-separated):
local
Enter an executor: kubernetes, custom, docker, docker-ssh, parallels, shell, ssh, docker-ssh+machine, virtualbox, docker+machine:
docker
Enter the default Docker image (for example, ruby:2.6):
alpine:latest
Success の表記が出れば登録は完了です。
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
docker executer の設定を追加
docker executer の選択したので、volumeの設定とネットワーク設定の追加が必要です。
vimをインストールして、設定ファイルを書き換えましょう。
(本来は Docker Volume を設定したほうがよいですが、怠けます。)
docker exec -it gitlab-runner /bin/bash
apt-get update
apt-get install vim
vi /etc/gitlab-runner/config.toml
clone_url
, network_mode
, volumes
を追加して、ランナーの設定を以下の状態にしてください。
[[runners]]
name = "local-runner"
url = "http://172.20.0.2"
token = "rTxCp61E5PuzCkKgaD3P"
executor = "docker"
clone_url = "http://172.20.0.2"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
network_mode = "gitlab-network"
tls_verify = false
image = "alpine:latest"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
shm_size = 0
登録の確認
正常に登録できたか確認します。
再び GitLab-CE の Settings から Runners を確認します。
local-runner というランナーが追加できています。
おわりに
Docker の扱いや GitLab-Runner の登録の仕方などもっとスマートな書き方もあると思いますが、あまり風呂敷を広げずに単純な方法での環境構築を紹介しました。
最低限の環境構築はできますが、よりしっかりと学びたい方は他の記事を参考にしていただきたいと思います。
また、今回は GitLab-CE もローカルで立てましたが、WEB版や社内のリソースを利用できる場合は、そちらも利用できます。
URL と token のみ確認できれば同様の手順で登録できます。