Jenkinsはじめました

プロジェクトの数が増え続けた結果、CC.rbの常駐プロセスでメモリを大量に消費するようになってしまいました。これまでごまかし続けてきましたが、いい加減何とかしなければと思った結果、Jenkinsを使ってみる事にしました。

Jenkinsを使い始めるまでは非常に簡単で、以下の手順でおしまいです。非常に手軽で驚きました。
(Java環境に詳しくないので、Javaについては適当にOracleから最新のJDKをダウンロードしてインストールしただけ)

$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ sudo yum install jenkins
$ sudo /etc/init.d/jenkins start

あとは、ブラウザで http://host:8080/ を開けば管理画面につながるので、適当にビルドジョブを追加するのみです。

Jenkins自体の機能についてはすでにいろいろな情報がそろっているのだろうと思うので割愛。以下は蛇足です。

rvm

Jenkinsはビルドタスクをシェルスクリプトで書けるので、rvm環境でも難なくCIできます。「難なく」というのは若干の誇張があるかもしれませんが、パスを通すなりの手順を経れば普通に使えるはずです。
runuserを覚えたので使ってみるテスト。

$ sudo yum install git
$ sudo /sbin/runuser -s /bin/bash - jenkins -c 'bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)'
$ sudo /sbin/runuser -s /bin/bash - jenkins -c 'source /var/lib/jenkins/.rvm/scripts/rvm; rvm package install readline openssl zlib'
$ sudo /sbin/runuser -s /bin/bash - jenkins -c 'source /var/lib/jenkins/.rvm/scripts/rvm; rvm install 1.8.7 -C --with-openssl-dir=$HOME/.rvm/usr --with-readline-dir=$HOME/.rvm/usr --with-zlib-dir=$HOME/.rvm/usr'

rvm-shellを覚えあので使ってみるテスト。

#!/var/lib/jenkins/bin/rvm-shell ruby-1.8.7
/var/lib/jenkins/bin/rvm current

試行錯誤の中だったため、上記手順と若干異なる手順で構築した環境(jenkinsのログインを/bin/bashとしちゃった様な環境)では、rvm&Bundler&Ruby1.9.2&Rails3の構成で問題なくビルドが実行できています。

Jenkins CLI

Jenkinsはコマンドラインインターフェースも持っています。

たとえば、create-jobは標準入力からジョブの設定情報XMLを受け取って新しいジョブを作成するコマンドです。

$ wget http://host:8080/jnlpJars/jenkins-cli.jar
$ sed 's/%PROJECT%/projectX/g' /var/lib/jenkins/jobs/templateJob/config.xml
  | java -jar jenkins-cli.jar -s http://host:8080/ create-job

既存ジョブを複製するcopy-jobというコマンドもありますが、任意の設定項目(リポジトリURLなど)を変更する機能があるのかは把握していません。テンプレートプロジェクトの一部を変更した複製を作る事ができるなら、リモートからごりごろとジョブを増やせるので、プロジェクト数が多い場合に便利かもしれません。