おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

さくらVPSにインストールした jenkins を設定する

さくら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。

スクリーンショット 2012-09-03 14.44.18

プラグインを入れる

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

プロジェクトを作る

「新規ジョブ作成」から下記のようにフォームに入力して新規プロジェクトを作ります。

スクリーンショット 2012-09-25 17.44.16

リポジトリの指定

bitbuket リポジトリの位置を jenkins に設定します。プロジェクトの設定画面中の「ソースコード管理システム」を下記のような感じで埋めます。

スクリーンショット 2012-09-25 18.00.43

bitbucket 連携

続いて bitbucket に push したときに、jenkinsサーバの所定のAPIを叩くような設定をします。bitbuket の admin→Services へ遷移し、「select a service」 から jenkins を選択するといくつか入力項目が出てきます。下記のように埋めます。

スクリーンショット 2012-09-24 16.39.37

それぞれの項目に何をいれていいかよくわからないと思うので次でそれぞれ説明していきます。

Project name

これはそのままですね。jenkinsで作ったプロジェクト名を入れます。

Token

セキュリティのため、プロジェクト毎にリモート(今回はbitbucket)からビルドする際の認証トークンを設定できます。プロジェクトの設定画面に移動して下記のように設定します。

スクリーンショット 2012-09-24 16.48.43

同じものを bitbucket の Token にも入れます。

Endpoint

jenkinsサーバのURLを指定します。ですが、ただURLを指定しただけではビルドに失敗します。前回 ユーザ認証を設定したので、ビルドを成功させるためには新しくbitbucket用のユーザを作成し、URLにユーザ名とAPIトークンを含めてやる必要があります。

まず、ユーザの権限は下記のようにしました。全体のRead権限は必須です(これがないとビルドに失敗します)。あとはジョブ関連を全てチェックしています(もしかしたら全部チェックする必要は無いかも)。

スクリーンショット 2012-09-24 16.46.03

APIトークンは開発者→bitbucket(もしくはあなたが設定したユーザ名)→設定から「APIトークンの表示」ボタンをクリックすると確認できます。

スクリーンショット 2012-09-24 17.04.57

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」を追加。

スクリーンショット 2012-09-25 17.18.11

するとプロジェクトのトップページに下記のようなグラフが作られるはず。

スクリーンショット 2012-09-25 17.20.38

テスト結果の推移を表示

次に、テストの件数の推移をグラフで表示させてみましょう。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 とすると、プロジェクトのトップページに下記のようなグラフが追加されているはず。

スクリーンショット 2012-09-25 17.27.44

ビルド設定

プロジェクト設定に下記のように書いて動かしています。

スクリーンショット 2012-09-25 17.31.16

失敗したときの通知

無難にメール通知にしています。「ビルド後の処理」に下記のように設定しています。

スクリーンショット 2012-09-25 17.33.42

ただ、さくらVPS契約したての段階ではうまく外にメールが送れなかった(25番ポートだけでなく587番もうまく使えなかった)ので、仮登録期間中はGmail経由で使っていました。設定方法は下記のエントリが詳しいです。

Jenkinsのメール通知にGmailを使う コーヒーサーバは香炉である

まとめ

これまでに紹介した設定で、bitbucket に push したらテストが実行されて、失敗したらメールで通知されるようになりました。また、jenkins上でテストカバレッジとテスト結果のグラフを確認できるようになりました。次回は「テストが通ったらステージングサーバ上にデプロイする」設定を紹介したいと思います。