本文へジャンプします。

ニフクラ ユーザーガイド

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

DevOps with GitLab:ニフクラを利用したGitLab Runnerのセットアップ

このページでは、GitLab Runnerを作成して、ニフクラDevOps with GitLabで作成したDevOpsサーバーに接続する手順を説明します。この手順で作成するRunnerはShared Runnerとして登録されるため、GitLab内の全てのプロジェクトで利用できるようになります。

コンピューティングサーバー上にDockerで構築する方法とKubernetes Service Hatoba上にHelmで構築する方法の2通りをご紹介します。

  1. 共通手順
  2. コンピューティングサーバー上にDockerで構築する手順
  3. Kubernetes Service Hatoba上にHelmで構築する手順

共通手順

DevOpsサーバーの作成

クイックスタートを参考にニフクラ DevOps with GitLabでDevOpsサーバーを作成します。

Registration Tokenの確認
  1. https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/admin/runnersにアクセスします。
  2. Register an instance runnerボタンをクリックします。
  3. 上記ボタンのクリックで現れるドロップダウンからRegistration tokenを確認します。このトークンは後ほど使いますので控えておいてください。

コンピューティングサーバー上に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:           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
  3. 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を利用するために必要な設定

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

    https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/admin/runnersにアクセスし、作成したRunnerが表示されていれば完了です。

    Runners · Admin Area · GitLab

Kubernetes Service Hatoba上にHelmで構築する手順

GitLab社ドキュメントGitLab Runner Helm Chartを基に、ニフクラKubernetes Service HatobaクラスターでどのようにRunnerを構築するかを説明します。

前提
  • Kubernetes Service Hatobaクラスターが作成済みで、クラスターからDevOpsサーバー(TCP 443番ポート)への疎通ができること
  • クライアント端末からkubectlによるクラスター操作ができること
  • クライアント端末にhelmがインストールされていること(本手順ではHelm 3を使用します)
手順
  1. Helm Repositoryの追加

    GitLabのHelm Repositoryを追加します。

    $ helm repo add gitlab https://charts.gitlab.io
  2. values.yamlの作成

    デプロイのための設定ファイルを作成します。gitlabUrlおよびrunnerRegistrationTokenは必須となっています。

    詳しい設定内容についてはGitLab社ドキュメントConfiguring GitLab Runner using the Helm Chartをご参照ください。values.yamlのデフォルトの設定値は公式リポジトリをご参照ください。

    gitlabUrl: https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/
    runnerRegistrationToken: XXXXXXXXXXXXXXXXXXXX
    rbac:
      create: true
      rules:
      - resources: ["pods", "secrets", "configmaps"]
        verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
      - resources: ["pods/exec", "pods/attach"]
        verbs: ["create", "patch", "delete"]
    runners:
      name: my-runner
  3. Helm Chartのインストール

    Helm Chartをインストールします。以下はgitlab-runner namespaceにデプロイする際のコマンド例です。

    利用可能なHelm Chartのバージョンを確認するにはhelm search repo -l gitlab/gitlab-runnerを実行してください。helm install時に--versionオプションを追加することでバージョンを指定することができます。

    $ helm install --create-namespace --namespace gitlab-runner gitlab-runner -f values.yaml  gitlab/gitlab-runner
    NAME: gitlab-runner
    LAST DEPLOYED: Fri Apr  1 12:34:56 2022
    NAMESPACE: gitlab-runner
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    Your GitLab Runner should now be registered against the GitLab instance reachable at: "https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/"
    
    Runner namespace "gitlab-runner" was found in runners.config template.
  4. 確認

    https://${DevOpsサーバー名}.${リージョン}.gitlab.devops.nifcloud.com/admin/runnersにアクセスし、作成したRunnerが表示されていれば完了です。

注意点

DinD(Docker in Docker)を使用する際の注意点

docker:dindイメージを使用してGitLab CI/CD上でコンテナイメージを作成する場合は、以下のようにvalues.yamlを設定して、build container(GitLab Runnerがジョブ実行時に作成するコンテナ)に対して特権を与える必要があります。

コンテナに対して特権を付与する設定にはリスクが伴います。信頼できる特定のグループのRunner(Group Runner)やプロジェクトのRunner(Specific Runner)に対してのみ設定されるべきで、GitLab全体で利用可能なShared Runnerには設定すべきではありません。

runners:
  config: |
    [[runners]]
      [runners.kubernetes]
        privileged = true

コンテナイメージビルドの手段としては、コンテナに特権を付与する代わりにkanikoを使用することが推奨されています。kanikoを使用したビルド方法について、詳しくはGitLab社ドキュメントUse kaniko to build Docker imagesをご参照ください。

参照

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

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