2017年9月25日月曜日

GitLab CI で自分だけのランナー (Specific Runner) を構築する方法

概要

GitLab CI を使う場合にビルドやテストをするサーバを用意する必要があります
GitLab 自体が持つサーバはみんなで共有する「Shared Runners」というもので、共有リソースなので待ちが発生したり処理が遅くなったりする場合があります
また、Shared Runners に機能やパッケージがないとそもそもビルドできないというケースもあります
そんな時に専用のサーバ「Specific Runners」を追加することで自分だけのランナーを作ることができます
今回は Specific Runner を Ubuntu 上に構築してみました

環境

  • Ubuntu Ubuntu 16.04.2
  • docker 17.03.0-ce
  • gitlab runner 10.0.0

事前手順

今回は Runner Executor に docker を使用します
なので事前に docker をインストールしておきましょう
http://blog.hawksnowlog.cf/2016/12/install-docker-on-ubuntu1604lts.html

インストール手順

  • curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
  • apt -y install gitlab-runner

ランナーを登録する

  • gitlab-runner register

いろいろと登録します

Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://your.gitlab.local/
Please enter the gitlab-ci token for this runner:
ySdowE9wxxxxxxxxxxxx
Please enter the gitlab-ci description for this runner:
[localhost]: my-runner
Please enter the gitlab-ci tags for this runner (comma separated):
shell
Whether to run untagged builds [true/false]:
[false]: true
Whether to lock the Runner to current project [true/false]:
[true]: true
Registering runner... succeeded                     runner=ySdowE9w
Please enter the executor: shell, ssh, kubernetes, docker, docker-ssh, parallels, virtualbox, docker+machine, docker-ssh+machine:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

上から

  • gitlab の URL を入力
  • プロジェクトに紐付いているトークンを入力
  • ランナーの名称を入力
  • タグの名称を入力
  • タグを持たない CI でもビルドするかどうか
  • ランナーをプロジェクト専用にしようするかどうか
  • Runner Executor を選択します

という感じです
トークンは UI から取得できます
「Settings」->「Pipelines」で真ん中くらいにあります
gitlab_ci_specific_runner1.png

Runner Executor は今回「shell」を選択しました
ここで docker なども選択することができます
今回は docker コマンドを素で実行するため shell を選択しました
Dockerhub にあるイメージを元にビルドしたい場合は「docker」を選択することになります

全部入力できたら完了です
これで GitLab の UI を確認すると Specific Runner に構築した Ubuntu サーバがランナーとして登録されていると思います
gitlab_ci_specific_runner2.png

gitlab-runner ユーザを docker グループに所属させる

  • usermod -g docker gitlab-runner
  • systemctl restart docker.service

これを行わないと以下のエラーとなります
gitlab-runner ユーザに docker コマンドを実行する権限がないためです

  • Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

Shared-runner を disable にする

これは環境によって異なるので Shared-runner がデフォルトで有効になっている場合は無効にしてください
プロエジェクトの Pipelines の設定を見ると Specific-runner と Shared-runner の設定があるのでそこで disable してください

試しに使ってみる

docker executor は .gitlab-ci.yml で Dockerhub にあるイメージを指定してそのイメージでビルドを行うことができるものです
が、今回は直接 docker build を行ってみます

  • vim .gitlab-ci.yml
stages:
    - build
    - test

build_job:
  stage: build
  script:
    - docker build -t my-runner .

test_job:
  stage: test
  script:
    - docker run my-runner

例えばこんな感じで YAML ファイルを定義します
Dockerfile は各自で適当に準備してください
Dockerfile が準備できれば上記のようにビルドをランナーで走らせることができるはずです

最後に

GitLab CI で使うランナーを独自で構築してみました
公式のインストール方法を見ると Ubuntu 以外にも Redhat 系や Windows, Mac までいけるので何でもランナーにすることはできそうです
結構簡単にできるので共有ランナーが遅いときに試してみてはいかがでしょうか

参考サイト

0 件のコメント:

コメントを投稿