January 5, 2013

Gitoliteに触れずにGitLabのhookからJenkins側でビルドする

GitLabのプロジェクトの"Services"に"Jenkins CI An extendable open source continuous integration server Not implemented yet"という表示があるので、そのうち対応するのかなという楽観から、とりあえず、Gitoliteを触らない方法を取りました。尚、この方法は、GitLabのプロジェクト毎に、後述のJenkins用のユーザを"Reporter"以上で登録する必要があり、その点は面倒です。

JenkinsとGitLabは同一サーバ上で、以下のようにアクセスするイメージです。
* http://example.com/jenkins/
* http://example.com/gitlab/


-- Linux(Ubuntu)での作業 --
(1)
/var/lib/jenkins/.ssh/gitlab/id_rsa(パーミッションは600)と/var/lib/jenkins/.ssh/gitlab/id_rsa.pubを用意します。
* /var/lib/jenkins/はjenkinsユーザのホームディレクトリです。
* 同一サーバ上で作成した公開鍵だと後述のGitLabへの登録時に"Key can't be fingerprinted"というエラーが出て登録出なかったので、とりあえず、他所で鍵を作って、それを登録しました。

(2)
/var/lib/jenkins/.ssh/config を編集します。
Host example.com
User git
Hostname example.com
IdentityFile /var/lib/jenkins/.ssh/gitlab/id_rsa


-- GitLabでの作業 --
(1)
任意のグループにプロジェクト(レポジトリ)を作成して、初期化コミットしておきます。以下、仮に"xxx"グループに"yyy"レポジトリを作成したとします。
* 何のコミットも無いと、後述の、プロジェクトへのメンバー追加が出来ませんでした。

(2)
HookのURLを、以下の形式で設定をしておきます。
http://example.com/jenkins/git/notifyCommit?url=git@example.com:xxx/yyy.git

(3)
GitLabにJenkins用のユーザを作成します。

(4)
(1)で作成したプロジェクトに、(2)で作成したJenkins用のユーザを"Reporter"以上で登録します。
* ある意味、最強の"Reporter"です。。。

(5)
Jenkinsユーザでログインしなおして公開鍵を登録します。この公開鍵は、前述の"/var/lib/jenkins/.ssh/gitlab/id_rsa.pub"です。


-- Jenkinsでの作業 --
(1)
Jobを"Build a free-style software project"で新規作成します。

(2)
"Source Code Management"で"Git"を選択して"git@example.com:xxx/yyy.git"を入力します。

(3)
"Advanced..."から"Skip internal tag"にチェックを入れます。
Manage Jenkins > Configure System > Git plugin で
"Global Config user.name Value"と"Global Config user.email Value"を入力します。

(4)
"Build Triggers"で"Poll SCM"にチェックを入れます。

(5)
"Build Now"してビルドが成功すれば、Jenkins側の設定はOKです。また、GitLabにコミットして、Jenkins側でビルドが走れば一通りOKです。

--

これで、Phingとつなげれば。。。

No comments:

Post a Comment