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 は CVS と Subversion のみだった。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 を実行することにした。