本文へジャンプします。

【重要なお知らせ】サービス統合に基づくサービス名称の読み替えのお願い(2024年4月1日)

2024年4月1日をもって、「ニフクラ」は、「FJcloud-V」に統合し、名称を変更しました。
当サイトのアドレス(ドメイン名)に含まれる「nifcloud.com」は現時点では変更はございませんが、
各ページに記載の「ニフクラ」「NIFCLOUD」「nifcloud」は、「FJcloud-V」に読み替えていただきますようお願いいたします。

ニフクラ ユーザーガイド

クラウド トップ>DevOps>ユーザーガイド>ニフクラを利用したGitLab Runnerのセットアップ

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)の取得
  1. 今回は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セクションを開きます。

  2. New instance runnerボタンをクリックします。

  3. 遷移後の画面で新しいRunnerの設定を実施します。最小限の設定を行うにはRun untagged jobsにチェックを入れて、Submitボタンをクリックします。 Create an instance runner

  4. 作成が完了したらglrt-から始まるRunner tokenがあることを確認します。このトークンはRunnerトークンとして後ほど使いますので控えておいてください。 Register

コンピューティングサーバー上にDockerで構築する手順

GitLab社ドキュメントRun GitLab Runner in a containerを基に、ニフクラコンピューティングサーバー上でどのようにRunnerを構築するかを説明します。

ステップ1:ニフクラサーバーの作成
  1. 「ニフクラコントロールパネル」にアクセスし、ビッグメニューから「コンピューティング」を選択します。
  2. 「サーバー作成」をクリックします。
  3. 「Ubuntu Server 22.04 LTS」のOSイメージを選択し、任意のサーバータイプでサーバーを作成します。ファイアウォールグループの設定は以下の通りです。
項目
プロトコル SSH
接続元種別 IPアドレス(IPv4)
IP/CIDR・グループ SSH接続元のIPアドレス
メモ 任意
ステップ2:DevOpsファイアウォールグループの設定

作成したサーバーのグローバルIPを確認し、DevOpsサーバーに設定されているファイアウォールに許可設定を追加します。

  1. ビッグメニューから「DevOps with GitLab」を選択します。
  2. 左メニューから「ファイアウォール」を選択します。
  3. DevOpsサーバーに設定されているファイアウォールグループを選び、「選択したファイアウォールグループの操作」のドロップダウンから「INルール設定の追加」をクリックします。
  4. 以下のようにINルールを追加します。
項目
プロトコル TCP
ポート 443
接続元種別 IPアドレス・CIDR
IPアドレス・CIDR 作成したサーバーのグローバルIP
メモ 任意
ステップ3:Runnerのセットアップ
  1. SSHログイン

    作成したサーバーにSSHでログインします。

    $ ssh -i ~/.ssh/${SSHキー} -l root -p 22 ${作成したサーバーのIPアドレス}
  2. 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
  3. 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を利用するために必要な設定

  4. 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)
  5. 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
  6. 確認

    https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/admin/runnersにアクセスし、RunnerがOnlineになっていることを確認します。 Runner

参考文献

  • ※本ページ記載の金額は、すべて税抜表示です。
  • ※本ページ記載の他社製品名および会社名などは、各社の商標または登録商標です。
  • ※本ページの内容は、2024年7月18日時点の情報です。

推奨画面サイズ 1024×768 以上