さくらVPSにjenkinsをインストールする - willnet.in の続きです。一ヶ月以上期間が空いてすみません><今回は、「bitbucket上のリポジトリにpushしたら自動でテストが走る」のと「jenkins上でテストカバレッジとテスト結果のグラフを確認できる」ところまでの設定を紹介します。
サーバを再起動したときに jenkins も自動で立ち上がるようにする
サーバ上で下記のようにコマンドを打つだけ。
chkconfig jenkins on
JDKのパスを入れる
jenkins は java で動いているんだし JDK のパスくらい設定しておいた方が良いのではと思って下記のように設定しました。でも自分の用途では必要なかったかも。
sudo yum install java-1.7.0-openjdk-devel.x86_64
で devel をインストール。その後jenkinsの管理→システムの設定→JDK に移動して下記のように設定すればおk。
プラグインを入れる
jenkinsの管理→プラグインの管理→利用可能に移動して必要なプラグインを選択するだけ。ただ、最初利用可能なプラグインが全く表示されず困りました。「高度な設定」の画面右下にある更新ボタンを押したら表示されたような気がします(他にも色々試したのでもしかしたら勘違いかも)。
- Git Plugin
- Jenkins ruby metrics pluign
- Hudson Ruby Plugin
- Jenkins Rake plugin
上記の4つのプラグインを入れましたが、 Ruby と Rake のプラグインは必要ないかも。
Ruby のインストール
Ruby1.9.3 をソースから入れました。本当は rbenv を使いたかったのですがハマりそうだったので、rbenv 化はおいおいやることにします。Rubyを入れる前に下記のパッケージをインストールしておきましょう(抜けあるかも)。
sudo yum install libyaml libyaml-devel zlib zlib-devel readline readline-devel openssl openssl-devel
下記のパッケージも必要であれば。libxml2 と libxslt は Nokogiri、qt47 は capybara-webkit を動かすのに必要です。
sudo yum install libxml2 libxml2-devel libxslt libxslt-devel qt47 qt47-devel
Ruby のインストールが終わったら bundler を入れておきましょう。
gem install bundler
プロジェクトを作る
「新規ジョブ作成」から下記のようにフォームに入力して新規プロジェクトを作ります。
リポジトリの指定
bitbuket リポジトリの位置を jenkins に設定します。プロジェクトの設定画面中の「ソースコード管理システム」を下記のような感じで埋めます。
bitbucket 連携
続いて bitbucket に push したときに、jenkinsサーバの所定のAPIを叩くような設定をします。bitbuket の admin→Services へ遷移し、「select a service」 から jenkins を選択するといくつか入力項目が出てきます。下記のように埋めます。
それぞれの項目に何をいれていいかよくわからないと思うので次でそれぞれ説明していきます。
Project name
これはそのままですね。jenkinsで作ったプロジェクト名を入れます。
Token
セキュリティのため、プロジェクト毎にリモート(今回はbitbucket)からビルドする際の認証トークンを設定できます。プロジェクトの設定画面に移動して下記のように設定します。
同じものを bitbucket の Token にも入れます。
Endpoint
jenkinsサーバのURLを指定します。ですが、ただURLを指定しただけではビルドに失敗します。前回 ユーザ認証を設定したので、ビルドを成功させるためには新しくbitbucket用のユーザを作成し、URLにユーザ名とAPIトークンを含めてやる必要があります。
まず、ユーザの権限は下記のようにしました。全体のRead権限は必須です(これがないとビルドに失敗します)。あとはジョブ関連を全てチェックしています(もしかしたら全部チェックする必要は無いかも)。
APIトークンは開発者→bitbucket(もしくはあなたが設定したユーザ名)→設定から「APIトークンの表示」ボタンをクリックすると確認できます。
jenkins サーバに bitbucket 用の鍵を設定する
jenkins サーバからプライベートな bitbucket リポジトリにアクセス出来るように読み取り専用鍵を作成します。まずは下記コマンドで鍵を作成します。
sudo -u jenkins ssh-keygen -t rsa
bitbucket の admin→Deployment keys に移動して、公開鍵を登録します。また、公開鍵と秘密鍵を /var/lib/jenkins/.sshに配置します。鍵の権限が適切に設定されているか確認しておきましょう。
jenkins で capybara
mac 上では普通に動く capybara-webkit も、X のない CentOS では動きません。そこで下記の二つのエントリを参考に headless を導入しました。
CentOS6.3 の Jenkins 上で jasmine-headless-webkit を走らせる - tomykaira makes love with codes kennyjのブログ(仮): capybara-webkitを動かす 2011/08/23時点版
カバレッジを表示
テストカバレッジを Jenkins 上に表示させてみましょう。Gemfile に下記の gem を追加して bundle install
します。
gem 'simplecov', :require => false
gem 'simplecov-rcov', :require => false
spec/spec_helper.rb
の先頭に下記のコードを追加
require 'simplecov'
require 'simplecov-rcov'
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
SimpleCov.start 'rails'
プロジェクト設定の「ビルド後の処理」に下記のように「PublishRcov report」を追加。
するとプロジェクトのトップページに下記のようなグラフが作られるはず。
テスト結果の推移を表示
次に、テストの件数の推移をグラフで表示させてみましょう。Gemfile に下記の gem を追加して bundle install
します。
gem 'ci_reporter'
続いて、Rakefile を下記のように修正
require File.expand_path('../config/application', __FILE__)
ENV['CI_REPORTS'] = Dir.pwd + '/reports'
begin
require 'ci/reporter/rake/rspec'
rescue LoadError
end
YourApp::Application.load_tasks
Jenkins の ビルド項目で、rake spec
としているところを rake ci:setup:rspec spec
とすると、プロジェクトのトップページに下記のようなグラフが追加されているはず。
ビルド設定
プロジェクト設定に下記のように書いて動かしています。
失敗したときの通知
無難にメール通知にしています。「ビルド後の処理」に下記のように設定しています。
ただ、さくらVPS契約したての段階ではうまく外にメールが送れなかった(25番ポートだけでなく587番もうまく使えなかった)ので、仮登録期間中はGmail経由で使っていました。設定方法は下記のエントリが詳しいです。
Jenkinsのメール通知にGmailを使う コーヒーサーバは香炉である
まとめ
これまでに紹介した設定で、bitbucket に push したらテストが実行されて、失敗したらメールで通知されるようになりました。また、jenkins上でテストカバレッジとテスト結果のグラフを確認できるようになりました。次回は「テストが通ったらステージングサーバ上にデプロイする」設定を紹介したいと思います。