DevOps with GitLab:ニフクラを利用したGitLab Runnerのセットアップ
このページでは、ニフクラでGitLab Runnerを作成して、DevOps with GitLabで作成したDevOpsサーバーに接続する手順を説明します。
当手順では、コンピューティングサーバー上にDockerでGitLab Runnerを構築します。
この手順で作成するRunnerはShared Runnerとして登録されるため、GitLab内の全てのプロジェクトで利用できるようになります。
GitLab RunnerはDevOps with GitLabでも作成することも可能です。作成方法はクイックスタート【Runner】を参考にしてください。
事前準備
DevOpsサーバーの作成
クイックスタート【DevOpsサーバー】を参考にDevOps with GitLabでDevOpsサーバーを作成します。
Registration Tokenの確認
https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/admin/runners
にアクセスします。Register an instance runner
ボタンをクリックします。- 上記ボタンのクリックで現れるドロップダウンから
Registration token
を確認します。このトークンは後ほど使いますので控えておいてください。
コンピューティングサーバー上にDockerで構築する手順
GitLab社ドキュメントRun GitLab Runner in a containerを基に、ニフクラコンピューティングサーバー上でどのようにRunnerを構築するかを説明します。
ステップ1:ニフクラサーバーの作成
- 「ニフクラコントロールパネル」にアクセスし、ビッグメニューから「コンピューティング」を選択します。
- 「サーバー作成」をクリックします。
- 「Ubuntu Server 22.04 LTS」のOSイメージを選択し、任意のサーバータイプでサーバーを作成します。ファイアウォールグループの設定は以下の通りです。
項目 | 値 |
---|---|
プロトコル | SSH |
接続元種別 | IPアドレス(IPv4) |
IP/CIDR・グループ | SSH接続元のIPアドレス |
メモ | 任意 |
ステップ2:DevOpsファイアウォールグループの設定
作成したサーバーのグローバルIPを確認し、DevOpsサーバーに設定されているファイアウォールに許可設定を追加します。
- ビッグメニューから「DevOps with GitLab」を選択します。
- 左メニューから「ファイアウォール」を選択します。
- DevOpsサーバーに設定されているファイアウォールグループを選び、「選択したファイアウォールグループの操作」のドロップダウンから「INルール設定の追加」をクリックします。
- 以下のようにINルールを追加します。
項目 | 値 |
---|---|
プロトコル | TCP |
ポート | 443 |
接続元種別 | IPアドレス・CIDR |
IPアドレス・CIDR | 作成したサーバーのグローバルIP |
メモ | 任意 |
ステップ3:Runnerのセットアップ
SSHログイン
作成したサーバーにSSHでログインします。
$ ssh -i ~/.ssh/${SSHキー} -l root -p 22 ${作成したサーバーのIPアドレス}
Dockerのインストール
Dockerをインストールします。詳しくはDocker社ドキュメントInstall Docker Engine on Ubuntuをご参照ください。
$ sudo apt update $ sudo apt install -y ca-certificates curl gnupg lsb-release $ sudo mkdir -p /etc/apt/keyrings $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg $ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt update $ sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
docker version
と入力してインストールが正常に完了しているかを確認します。$ sudo docker version Client: Docker Engine - Community Version: 20.10.21 API version: 1.41 Go version: go1.18.7 Git commit: baeda1f Built: Tue Oct 25 18:01:58 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.21 API version: 1.41 (minimum version 1.12) Go version: go1.18.7 Git commit: 3056208 Built: Tue Oct 25 17:59:49 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.9 GitCommit: 1c90a442489720eec95342e1789ee8a5e1b9536f runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.19.0 GitCommit: de40ad0
docker compose version
と入力してインストールが正常に完了しているかを確認します。$ sudo docker compose version Docker Compose version v2.12.2
docker-compose.yml
の作成docker-compose.yml
を作成します。利用可能なDockerイメージのタグはDocker Hubで確認できます。version: "3" services: gitlab-runner: image: gitlab/gitlab-runner:alpine-v15.5.0 container_name: gitlab-runner restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock - gitlab-runner-config:/etc/gitlab-runner healthcheck: test: ["CMD-SHELL", "pidof gitlab-runner"] volumes: gitlab-runner-config:
プライベートLAN経由で利用する場合
前提:Runnerに使用するサーバーがプライベートLANに接続されており、DevOpsサーバーとの疎通が可能であることを確認してください。
まず、
docker-compose.yml
を以下の内容で作成します。version: "3" services: gitlab-runner: image: gitlab/gitlab-runner:alpine-v15.5.0 container_name: gitlab-runner restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock - gitlab-runner-config:/etc/gitlab-runner healthcheck: test: ["CMD-SHELL", "pidof gitlab-runner"] extra_hosts: - ${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com:${DevOpsサーバーのプライベートIPアドレス} volumes: gitlab-runner-config:
次に、/etc/hosts へ追記します。
GitLab RunnerのDocker Executorは、Runnerに使用するサーバーのホスト側のdockerを使用してジョブのコンテナを作成するため、コンテナのイメージをpullする際にはホスト側の
/etc/hosts
が参照されます。
そのため、ホスト側の/etc/hosts
に以下を追記します。${DevOpsサーバーのプライベートIPアドレス} ${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com ${DevOpsサーバーのプライベートIPアドレス} registry-${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com
※
${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com
は、プライベートLAN経由でDependency Proxyを利用するために必要な設定
※registry-${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com
は、プライベートLAN経由でContainer Registryを利用するために必要な設定GitLab Runnerの起動
docker compose
コマンドを使用してGitLab Runnerを起動します。$ sudo docker compose up -d
正常に起動しているか確認します。
$ sudo docker compose ps NAME COMMAND SERVICE STATUS PORTS gitlab-runner "/usr/bin/dumb-init …" gitlab-runner running (healthy)
RunnerをGitLabに登録
起動したコンテナ内に入り、RunnerをGitLabに登録します。
$ sudo docker compose run gitlab-runner register
以下のように入力を求められるので、DevOpsサーバーのURL、Registration Tokenおよびその他の項目を入力します。
※Registration Tokenはhttps://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/admin/runners
の Register an instance runner から取得可能Runtime platform arch=amd64 os=linux pid=7 revision=bd40e3da version=14.9.1 Running in system-mode. Enter the GitLab instance URL (for example, https://gitlab.com/): https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/ # DevOpsサーバーのURLを入力 Enter the registration token: XXXXXXXXXXXXXXXXXXXX # Registration Tokenを入力 Enter a description for the runner: [a2d6b1434fc6]: my-runner # 任意のRunner名を入力(デフォルトの名前にする場合はenter) Enter tags for the runner (comma-separated): # Runnerのtagを入力(必要ない場合はenter) Enter optional maintenance note for the runner: # Runnerのメンテナンス用のメモを入力(必要ない場合はenter) Registering runner... succeeded runner=2CUJZDWs Enter an executor: parallels, virtualbox, docker+machine, docker-ssh +machine, custom, docker, ssh, kubernetes, docker-ssh, shell: docker # Executorを選択。ほとんどの場合、dockerと入力 Enter the default Docker image (for example, ruby:2.7): alpine # デフォルトのDockerイメージを入力 Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
プライベートLAN経由で利用する場合
RunnerをGitLabに登録する際に、
docker-extra-hosts
オプションを指定します。
これにより、ジョブのコンテナ内でDevOpsサーバーのドメインを名前解決した際にプライベートIPアドレスが手に入ります。$ sudo docker compose run gitlab-runner register \ --docker-extra-hosts ${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com:${DevOpsサーバーのプライベートIPアドレス} \ --docker-extra-hosts registry-${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com:${DevOpsサーバーのプライベートIPアドレス}
※
${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com
はプライベートLAN経由でDependency Proxyを利用するために必要なdocker-extra-hosts
オプション
※registry-${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com
はプライベートLAN経由でContainer Registryを利用するために必要なdocker-extra-hosts
オプションDevOpsサーバーのURL、Registration Tokenおよびその他の項目を入力後、
docker-extra-hosts
の内容が登録されていることを確認します。$ sudo docker compose exec gitlab-runner cat /etc/gitlab-runner/config.toml
作成されたconfig.tomlの例を以下に示します。
concurrent = 1 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "0802b6031959" url = "https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud" id = 7 token = "XXXXXXXXXXXXXXXXXXXX" token_obtained_at = 2022-11-11T07:48:02Z token_expires_at = 0001-01-01T00:00:00Z executor = "docker" [runners.custom_build_dir] [runners.cache] [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure] [runners.docker] tls_verify = false image = "alpine" privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache"] extra_hosts = ["${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud:{DevOpsサーバーのプライベートIPアドレス}", "registry-${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud:{DevOpsサーバーのプライベートIPアドレス}"] shm_size = 0
確認
https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/admin/runners
にアクセスし、作成したRunnerが表示されていれば完了です。