Jenkins の導入

これから始めるプロジェクトで Jenkins を導入しようか迷っている。とりあえず使ってみようということで、自宅の開発環境に Jenkins をセットアップしたときのメモ。

環境

Git のリポジトリに push されたのを検知して、Rspec のテストを Rake を使って実行するというのを実現する。

リポジトリの作成

テスト用のリポジトリを Jenkins サーバと同じサーバ上に作成した。

% mkdir -p ~/repos/sandbox/jenkins_test
% git init ~/repos/sandbox/jenkins_test
Initialized empty Git repository in /home/username/repos/sandbox/jenkins_test/.git/

作成したディレクトリの中には Rakefileソースコードを配置した。

% ls ~/repos/sandbox/jenkins_test
Rakefile  bowling.rb  bowling_spec.rb

Rekefile の内容は次の通り。

task 'jenkins' do
  require 'rspec/core/rake_task'
  RSpec::Core::RakeTask.new(:jenkins) do |spec|
    spec.pattern = '*_spec.rb'
    spec.rspec_opts = ['-fs']
  end
end

{:lang="ruby"}

残りの 2 ファイルは http://rspec.info/ を参考にしている。

インストール

https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu に従ってインストール。

問題

説明では 80 ポートへのアクセスをローカルの 8080 ポートへ転送するような記述だが、 http://servername/ では Jenkins のページは表示されなかった。http://servername:8080/ であれば表示される。8080 のTomcat は動作しているので、プロキシ関連で問題が起きているようだ。

解決

http://www.zzorn.net/2009/11/setting-up-hudson-on-port-80-on-debian.html を参考に、libapache2-mod-proxy-html をインストールすることで解決した。パッケージが足りないだけでした。

プラグイン

インストールは

Jenkinsの管理 » プラグインの管理 » 利用可能タブ

から行う。

Git Plugin

デフォルトで使用できる SCM は CVSSubversion のみだった。Git を使いたいのでプラグインをインストールする。

「Git Plugin」にチェックを入れ、「再起動せずインストール」をクリック。プロジェクトの設定画面から、Git が使えるようになっていることが確認できればOK。

作成したディレクトリ「/home/username/repos/sandbox/jenkins_test/」を Repository URL に設定する。

問題

ビルドの実行時に以下のようなメッセージのエラーが発生する。

FATAL: Could not apply tag jenkins-test-id
解決
Jenkinsの管理 » システムの設定 » Git plugin

の 「Global Config user.name Value」と「Global Config user.email Value」を設定する。

ビルド

リポジトリに push されたら Rake を使ってテストを実行させたい。

手順の追加

「手順の追加」で「シェルの実行」を選択する。シェルスクリプトの内容は以下。

PATH=/home/username/.rbenv/shims:/home/username/.rbenv/bin:${PATH}
rake jenkins
Rake Plugin ではないのか

Rake を使うために Rake Plugin というのがあるが、rbenv を使っている場合はどうも使えなさそう。

こんなエラー (rake への PATH が通っていない) が出たり 。

[workspace] $ rake jenkins
FATAL: rake execution failed
java.io.IOException: Cannot run program "rake" (in directory "/var/lib/jenkins/jobs/test/workspace"): java.io.IOException: error=2, No such file or directory

こんなエラー (rspec への PATH が通っていない) が出たりする。

[workspace] $ /home/username/.rbenv/versions/1.9.2-p290/bin/rake jenkins
(in /var/lib/jenkins/jobs/test/workspace)
/home/username/.rbenv/versions/1.9.2-p290/bin/ruby -S rspec bowling_spec.rb -fs
/home/username/.rbenv/versions/1.9.2-p290/bin/ruby: No such file or directory -- rspec (LoadError)

環境変数を設定すれば解決しそうであるが、サーバ内部はどうしてもという場合以外は手を入れたくないので、シェルスクリプト内で環境変数を設定し rake を実行することにした。