読者です 読者をやめる 読者になる 読者になる

jiska

i'm a PHPer.

Ubuntu ServerにJenkinsをセットアップしてGitレポジトリと連動するまでのまとめ

さくさく行きます。

前提条件

Jenkins, Gitレポジトリのあるサーバー共にUbuntu Server 11.10 (64bit) です。
Gitレポジトリの管理にはgitosisを使用します。
git clone, pullにはsshを使用するので公開鍵登録を行います。
sshのポートは標準の22ではなく10022を使用します。

Jenkinsのインストールとセットアップ

公式ページ ( http://pkg.jenkins-ci.org/debian/ ) を参考にしつつPPAを追加してapt-get installします。
Gitのプラグインも一緒にインストールします。

$ wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
$ echo "deb http://pkg.jenkins-ci.org/debian binary/" | sudo tee -a /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get instal jenkins
$ wget -O jenkins-cli.jar http://localhost:8080/jnlpJars/jenkins-cli.jar
$ java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin git
$ java -jar jenkins-cli.jar -s http://localhost:8080 safe-restart
$ rm jenkins-cli.jar

インストールが終わるとjenkinsユーザーが作成されます。
jenkinsユーザーにGitレポジトリのクローン時に必要になるssh鍵やgitconfigの設定を行います。

$ sudo -u jenkins -H git config --global user.email "jenkins@jenkins-server"
$ sudo -u jenkins -H git config --global user.name "jenkins"
$ sudo -u jenkins -H ssh-keygen -t rsa -C jenkins@jenkins-server

/var/lib/jenkins/.ssh/id_rsa.pub がgitosisで必要になるのでコピーしておきます。
鍵の名前も変更しておきます。
作業しやすいように作業ユーザーにchownしておいてください。

$ sudo cp /var/lib/jenkins/.ssh/id_rsa.pub ~/jenkins@jenkins-server.pub

.ssh/configを編集してGitレポジトリサーバーのsshポートを登録します。

$ sudo -u jenkins vi /var/lib/jenkins/.ssh/config
Host git-server
  Port 10022

Gitレポジトリサーバーと通信するために一度known_hostsに追加する必要があるのでsshを試みます。接続する必要はないです。

$ sudo -u jenkins ssh git-server

(known_hostsに追加していいか聞かれるのでyesを答える)

Gitレポジトリの作成

gitosisを使ってアカウント管理とかレポジトリの管理をします。gitosisは便利です。
gitosisの説明や使い方は gitosisによるgitサーバーの管理 ( http://dora.bk.tsukuba.ac.jp/~takeuchi/index.php?%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%2Fgitosis%20%A4%CB%A4%E8%A4%EB%20git%20%A5%B5%A1%BC%A5%D0%A1%BC%A4%CE%B4%C9%CD%FD ) が参考になります。

gitosis-initで管理用のレポジトリを作ったところで作業を開始です。

$ git clone gitosis@git-server:gitosis-admin.git

gitosis-adminにJenkinsサーバーの公開鍵とユーザー情報を追加します。
Jenkinsがpushすることはない(あっても困る)ので読み取り専用権限でいいと思います。
そこでreadonlyグループを作成し、clone, pullができるGitレポジトリの名前を登録します。
サンプルではyourprojectとします。

$ cp jenkins@jenkins-server.pub gitosis-admin/keydir
$ vi gitosis-admin/gitosis.conf
[gitosis]

[group readonly]
members = jenkins@jenkins-server
readonly = yourproject

これでJenkinsからGitレポジトリへのアクセスができるようになりました。
gitosis@git-server:yourproject.git
でアクセスできるようになります。

Jenkinsにジョブを登録

Jenkinsのダッシュボードをブラウザで開き、新規ジョブ作成をします。

ソースコード管理システム で Git を選択し、レポジトリに gitosis@git-server:yourproject.git を設定すれば大丈夫です。
あとはそれぞれのプロジェクトにあった設定をしてください。

Enjoy!