GitLab RunnerをDockerで動かす

Last-modified: Mon, 25 Jul 2022 12:38:17 JST (640d)
Top > GitLab RunnerをDockerで動かす
  • GitLab の無料プランについて、GitLab-CIの実行時間が減るので、自宅DockerサーバでGitLab Runnerを動かしてみました。
    なお、副産物として、Dockerサーバ内にダウンロードしたDockerイメージが残るので、二回目以降は早くなります。
  • GitLab Runnerは、Runner側から4秒おきにGitLabサーバへポーリングする仕組みなので、サーバ側に特別なポートを開けたり、固定IPである必要はありません。なので、自宅に余ってるPCにDockerを入れて動かすことが出来ます。

GitLab Runnerのインストール

  • まず、Dockerサーバ内で動かすGitLab Runnerを設定します。
  • 今回は公式Dockerイメージを使います。また、GitLab Runnerはキャッシュの保持にS3がGCPしか今のところ使えないので、
    S3互換実装であるMinioを一緒に動かします。
  1. docker-compose.ymlをこんな感じで作成します。
    version: '2'
    volumes:
      gitlab-runner-config:
        driver: local
      minio-data:
        driver: local
    services:
      gitlab-runner:
        restart: always
        image: gitlab/gitlab-runner:latest
        volumes:
          - gitlab-runner-config:/etc/gitlab-runner
          - /var/run/docker.sock:/var/run/docker.sock:ro
      minio:
        restart: always
        image: minio/minio:latest
        ports:
          - "9000:9000"
        volumes:
          - minio-data:/data
        command: server /data
        environment:
          MINIO_ACCESS_KEY: AKIAIOSFODNN7EXAMPLE
          MINIO_SECRET_KEY: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  2. ストレージを作成する為に、一旦起動します。起動したら Ctrl+Cで終了させます。
    docker-compose up

GitLabの設定

  1. GitLabよりGitLab Runnnerを動かしたいリポジトリ(またはグループ)のCI/CD設定をクリックします。
    gitlab01.jpg
  2. Runnerの項目をクリックします。
    gitlab02.jpg
  3. Runnerのマニュアルセットアップ画面にある、Runner登録トークンをメモしておきます。
    gitlab03.jpg
  4. さきほど作成したdocer-composeのボリュームを調べておきます。
    docker volume ls
  5. 設定用コンテナを起動します。ここでは、 gitlabrunner_gitlab-runner-config というボリューム名とします。なお、config.tmlにあるトークンは自動生成に変更されたようなので、GitLabで表示されるトークンとは別物になります。つまり新規ランナーを登録する際は設定ファイルを直接編集するのではなく、必ず設定用コンテナで登録する必要があります。
    docker run --rm -it -v gitlabrunner_gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:latest register
  6. ウイザードが表示されますので、以下質問に答えます。
    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
    <GitLab Runnerを動かすGitlabのアドレスを指定します。ここではhttps://gitlab.comを指定しました。>
    Please enter the gitlab-ci token for this runner:
    <先ほどメモったRunner登録トークンを入力します。>
    Please enter the gitlab-ci description for this runner:
    [XXXXXXXX]: <作成したGitLab Runnerに名前を付けます。何も入力しなければIDになります。>
    Please enter the gitlab-ci tags for this runner (comma separated):
    <GitLab-CIで実行する際に識別するタグ名を付けます。これを付けることで、GitLab-CIで特定ジョブだけ割り当てることが出来ます。>
    Registering runner... succeeded                     runner=SssexSKE
    Please enter the executor: docker, docker-ssh, shell, ssh, virtualbox, custom, parallels, docker+machine, docker-ssh+machine, kubernetes:
    <今回はDockerで動かすので、dockerと入力します。>
    Please enter the default Docker image (e.g. ruby:2.6):
    <gitlab-ci,ymlでイメージの指定が無かった場合デフォルトで動かすDockerイメージを指定します。ここではubuntu:latestを指定しました。>
    Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
  7. これで基本的な設定は終わり・・・なのですが、残念ならが設定用コンテナではキャッシュの設定が出来ないようなので、手動で設定します。
    作成した gitlab-runner_gitlab-runner-config ボリュームを適当なコンテナでマウントして中の設定ファイルにある、 runners セクションを設定ます。
    [[ runners ]]
      name = "XXXXXXXXXX"
      url = "https://gitlab.com/"
      token = "<生成されたトークンID>"
      executor = "docker"
      [runners.custom_build_dir]
    #ここから追加
      [runners.cache]
        Type = "s3"
        Path = "cache"
        Shared = true
        [runners.cache.s3]
          ServerAddress = "minio:9000"
          AccessKey = "AKIAIOSFODNN7EXAMPLE"
          SecretKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
          BucketName = "gitlab-runner"
          Insecure = true
        [runners.cache.gcs]
    #ここまで
      [runners.docker]
        tls_verify = false
        image = "ubuntu:latest"
        privileged = false
        disable_entrypoint_overwrite = false
        oom_kill_disable = false
        disable_cache = false
        volumes = ["/cache"]
        shm_size = 0
    • 安全の為 privileged = false にデフォルトでは設定してあります。つまり、 Docker in Dockerは出来ない という事になります。gitlab-ci内でボリュームのマウントをしたいとか、Dockerをビルドするとかの用途で使用したい場合はここをtrueにしてかつ、privilegedを有効化してコンテナを起動する必要があります。でないとDockerホストが見つからないというエラーが出ます。が、実質Dockerホストのrootを渡すようなものなので避けたほうが良いでしょう。

GitLab runner動作チェック

  1. 設定が完了したら、GitLab Runnerコンテナを起動させます。
    docker-compose up -d
  2. 無事起動したら、GitLab側でRunnerが見えます。ここから設定を変更することも出来ます。
    gitlab04.jpg
  3. このままではキャッシュを使用することが出来ませんので、minioの管理画面に入り、格納先バケットを作っておきます。
    gitlab05.jpg
  4. 無事バケットが作成されたら、GitLab側で共有ランナーを無効化したうえで、ジョブをキックしてみましょう。
    gitlab06.jpg
  5. もし、gitlab-ci.yml内でキャッシュを使うように設定していれば、minio内のバケットにキャッシュが生成されています。
    gitlab07.png

Counter: 1231, today: 3, yesterday: 6

このページの参照回数は、1231です。