DevOps with GitLab:ニフクラを利用したGitLab Runnerのセットアップ
このページでは、ニフクラでGitLab Runnerを作成して、DevOps with GitLabで作成したDevOpsサーバーに接続する手順を説明します。
当手順では、コンピューティングサーバー上にDockerでGitLab Runnerを構築します。
この手順で作成するRunnerはShared Runnerとして登録されるため、GitLab内の全てのプロジェクトで利用できるようになります。
同様の手順でRunnerをGroup runnerやProject runner (Specific runner) として登録することも可能です。
GitLab RunnerはDevOps with GitLabでも作成することが可能です。作成方法はクイックスタート【Runner】を参考にしてください。
事前準備
DevOpsサーバーの作成
クイックスタート【DevOpsサーバー】を参考にDevOps with GitLabでDevOpsサーバーを作成します。
Runnerトークン(Runner token
)の取得
今回はInstance runner (Shared runner) として登録するため、
https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/admin/runners
にアクセスします。
※1.Group runner として登録する場合は、https:///${DevOpsサーバー名}.${リージョン}/groups/${Runnerを登録したいグループ名}/-/runners
にアクセスします。
※2.Project runner (Specific runner) として登録する場合は、https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/${グループ名}/${Runnerを登録したいプロジェクト名}/-/settings/ci_cd
のRunnersセクションを開きます。New instance runner
ボタンをクリックします。遷移後の画面で新しいRunnerの設定を実施します。最小限の設定を行うには
Run untagged jobs
にチェックを入れて、Submit
ボタンをクリックします。作成が完了したら
glrt-
から始まるRunner token
があることを確認します。このトークンはRunnerトークンとして後ほど使いますので控えておいてください。
コンピューティングサーバー上に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: 26.1.4 API version: 1.45 Go version: go1.21.11 Git commit: 5650f9b Built: Wed Jun 5 11:28:57 2024 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 26.1.4 API version: 1.45 (minimum version 1.24) Go version: go1.21.11 Git commit: de5c9cf Built: Wed Jun 5 11:28:57 2024 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.33 GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957 runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0
docker compose version
と入力してインストールが正常に完了しているかを確認します。$ sudo docker compose version Docker Compose version v2.27.1
compose.yaml
の作成compose.yaml
を作成します。利用可能なDockerイメージのタグはDocker Hubで確認できます。services: gitlab-runner: image: gitlab/gitlab-runner:alpine-v16.10.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-v16.10.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 IMAGE COMMAND SERVICE CREATED STATUS PORTS gitlab-runner gitlab/gitlab-runner:alpine-v16.10.0 "/usr/bin/dumb-init …" gitlab-runner 3 minutes ago Up 3 minutes (healthy)
RunnerをGitLabに登録
起動したコンテナ内に入り、RunnerをGitLabに登録します。
$ sudo docker compose run gitlab-runner register --url https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com --token glrt-XXXXXXXXXXXXXXXXXXXX
以下のように入力を求められるので、DevOpsサーバーのURL、Runnerトークン(authentication token)およびその他の項目を入力します。
Runtime platform arch=amd64 os=linux pid=6 revision=81ab07f6 version=16.10.0 Running in system-mode. Enter the GitLab instance URL (for example, https://gitlab.com/): [https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com]: # enterで進む Verifying runner... is valid runner=XXXXXXXXX Enter a name for the runner. This is stored only in the local config.toml file: [5dcfdd18b592]: # 任意のRunner名を入力(デフォルトの名前にする場合はenter) Enter an executor: custom, shell, ssh, docker-windows, kubernetes, instance, parallels, virtualbox, docker, docker+machine, docker-autoscaler: 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! Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
プライベートLAN経由で利用する場合
RunnerをGitLabに登録する際に、
docker-extra-hosts
オプションを指定します。
これにより、ジョブのコンテナ内でDevOpsサーバーのドメインを名前解決した際にプライベートIPアドレスが手に入ります。$ sudo docker compose run gitlab-runner register \ --url https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com --token glrt-XXXXXXXXXXXXXXXXXXXX \ --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、Runnerトークンおよびその他の項目を入力後、
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 = "5dcfdd18b592" url = "https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com" id = 7 token = "glrt-XXXXXXXXXXXXXXXXXXXX" token_obtained_at = 2024-06-10T05:34:34Z token_expires_at = 0001-01-01T00:00:00Z executor = "docker" [runners.custom_build_dir] [runners.cache] MaxUploadedArchiveSize = 0 [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.com:{DevOpsサーバーのプライベートIPアドレス}", "registry-${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com:{DevOpsサーバーのプライベートIPアドレス}"] shm_size = 0 network_mtu = 0
確認
https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/admin/runners
にアクセスし、RunnerがOnline
になっていることを確認します。