DevOps with GitLab:当サービスを利用したGitLab Runnerのセットアップ
当サービス上でGitLab Runnerを構築し、DevOps with GitLabで作成したDevOpsサーバーに接続する手順を説明します。
本手順では、コンピューティングサーバー上にDockerでGitLab Runnerを構築します。
本手順で作成するRunnerはShared Runnerとして登録されるため、GitLab内の全プロジェクトで利用できます。
Group runnerやProject runner (Specific runner) も同様の手順で登録できます。
GitLab RunnerはDevOps with GitLabでも作成できます。作成方法はクイックスタート【Runner】を参照してください。
事前準備
DevOpsサーバーの作成
クラウドユーザーガイド(DevOps with GitLab:クイックスタート【DevOpsサーバー】)を参考に、DevOps with GitLabでDevOpsサーバーを作成します。
Runnerトークン(Runner token)の取得
今回はInstance runner (Shared runner) として登録するため、
https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/admin/runnersにアクセスします。
※Group runner として登録する際は、https:///${DevOpsサーバー名}.${リージョン}/groups/${Runnerを登録したいグループ名}/-/runnersにアクセスします。
※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-plugindocker 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: de40ad0docker compose versionと入力し、インストールが正常に完了しているかを確認します。$ sudo docker compose version Docker Compose version v2.27.1compose.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状態であることを確認します。
参考文献
フィードバック
サービス利用中のトラブルは、サポート窓口にお願いします。
お役に立ちましたか?