GitLab を更新したこともあって、ようやくまともに GitLab CI Runner を使うことが出来るようになりました。
基本的に設定で迷うようなところはないのですが、 GitLab が外向きと内向きで使用すべきアドレスが違うといった状況では、 CI Runner をうまく動作させるのに一手間があったので記録として残しておきます。
同じように詰まっている人の助けになれば幸いです。
GitLab CI Runner の準備
とりあえず別の環境で CentOS をインストールして、 GitLab CI Runner の準備を行いました。各ビルドごとに環境を汚さないようにするため、 Docker コンテナで各タスクをこなすような Runner の構築としました。
# yum install docker # yum install gitlab-ci-multi-runner
インストールが完了したら Docker を起動しておきます。
# systemctl start docker
以下のコマンドで、Runner の初期設定を行います。実行すると対話形式で各設定を入力します。
# gitlab-runner register
配置しているGitLab のアドレスや、そこに対するアクセストークンが必要になります。executor の設定では、 docker を指定し、 Docker image としては ubuntu:latest を設定しました。
GitLabが外側・内側でアドレスが異なる場合
GitLab が外向きには example.com/gitlab として公開しているものとします。このとき、内側からは 192.168.1.1/gitlab でサービスをしているものとします。
この状況では、リポジトリの Clone URL が外向きで通知されてしまい、内側に配置した Runner からは正常に取得することができません。Runner が Docker で動かすタイプのものでない場合には、 /etc/gitlab-runner/config.toml の中で、 clone_url を指定することでアドレスの補正ができるようです。
[[runners]] name = "gitlab-runnter-01" url = "http://example.com/gitlab/" executor = "docker" clone_url = "http://192.168.1.1/gitlab/"
しかし、 Docker で実行するような場合ではこの設定が効きませんでした。そこで以下のようにして、 Docker の中からのアドレス解決に細工することにしました。
[[runners]] name = "gitlab-runnter-01" url = "http://example.com/gitlab/" executor = "docker" clone_url = "http://192.168.1.1/gitlab/" environment = ["GODEBUG=netdns=cgo"] [runners.docker] extra_hosts = ["example.com:192.168.1.1"] tls_verify = false image = "ubuntu"
指定されたURL を内向きのアドレスとなるように extra_hosts に設定し、 使用する DNS に関しても処置をしています。これらの方法は、フォーラムのほうで話されていた話題を参考としました。(https://gitlab.com/gitlab-org/gitlab-runner/issues/1845,
この方法を行うことで、 GitLab から同じく内側に配置した Runner で CI を回すことに成功しました。
その他
ちゃんとドキュメントとを読めばわかることかもしれませんが、 Docker で実行して成果物(artifacts)の保存に関してもちょっとだけ手間取りました。基本的には、リポジトリの clone した箇所からの相対パスで artifacts のファイル指定を行わないといけないようです。
[amazonjs asin=”4295003034″ locale=”JP” title=”GitLab実践ガイド (impress top gear)”]