(」・ω・)」うー!(/・ω・)/にゃー!

GitLabのリポジトリをJenkinsと連動させる

| Comments

さくらVPSの移行にともなってリポジトリとかを移行する必要が出たので、 リポジトリ管理をGitwebからGitLabに移行したんだが、そこでちょっと悩ましい問題にあたった。

GitLabは単体で見るととっても便利だなーと思う半面、ガツガツ成長してきたプロジェクトだけあって まだハードコーディングになってるところや、連携部分で弱いところがあったりする。

簡単に言うと枯れてない。まだ各所で細かーくバグっぽい。1 面白いからいいけど。 で、今回はJenkinsとの連携の際にちょっと悩むことになった。

GitLabにpublic repos がない。

サブタイトルのとおりなんだけど。ないんです。 なので、Jenkinsその他オートメーションツールからのcloneをするにも、他のユーザーと同様に鍵認証が必要になる。

これ自体はgitoliteの時代からあった話ではあるんだけど、問題はリポジトリのアクセス権やらユーザーやらの管理を、 GitLabが独自の機構で面倒見ている点。

そのため、GitLabの仕組みの中で解決しようとすると、Jenkinsユーザを作って全てのプロジェクトにJenkinsユーザを追加しなければいけない。 しかし、このやり方だとオートメーションツールが増えるごとにユーザーを増やして全プロジェクトにReporterとして追加。。。とかやらなきゃいけなくてすごく面倒。

どうしたか: Gitoliteを直接弄った。

しょうがないじゃなーい、と思ってGitoliteに直接jenkinsユーザを追加、systemグループを作って全リポジトリをreadonlyでアクセスさせた。 ちなみに、gitolite.confをいじることになるけど、このファイルはGitLabがパースして書き換えをゴリゴリやるので、やたらめったらいじらないほうがいい。2

gitolite-adminをいじれるのはgitlabユーザだけなので、こんな感じ。

1
2
3
4
5
6
7
8
9
10
11
% sudo -u gitlab git clone git@git.example.com:gitolite-admin.git /tmp/gitolite-admin
% sudo -u gitlab cp /path/to/jenkins.pub /tmp/gitolite-admin/keydir/
% vi /tmp/gitolite-admin/conf/gitolite.conf

(以下の様な内容を追記)
@system             = jenkins

repo    @all
   R                              = @system

% (以下略)

このあたりの情報は、GitLab側のパーサもエラーになることなくうまいことマージしてくれた。

とりあえず、これなら連携するシステム系は、いちいちリポジトリに追加しまくらなくてもサクサク進められるので、よさそう。

で、結論として。

この方法がいいのかどうかは正直わからない。というか、本当はやりたくないけど仕方ない感じ。 今の状況で言うと、正しい選択肢ってのは特にない気がする。

今後に期待したいなー。

  1. たとえばgitoliteとは連携を謳っているにもかかわらず、インストールプロセスがg3に追随できてない。これはlib/tasks/gitlab/status.rake のumask検証部分の問題。gitlab.yamlをデフォルトのままインストールプロセスをすすめるととりあえず回避できる。
  2. いじるときには、一度 lib/gitlabhq/gitolite.rbを読むといい。以前、gitoliteのwildcard reposを設定していた時に、Cなどの権限をGitLabが理解できずにパースエラーになってて参ったことがあった。。。

Comments