RSpecをrvm×Jenkinsで実行するまでの試行錯誤をメモ

  • Pocket
  • このエントリーをはてなブックマークに追加
  • 162 follow us in feedly

まえがき

今回はJenkinsを使ってrvmで複数バージョンのRuby環境を構築してRSpecを実行してみました。

なにかといろいろ躓いちゃったのでメモしておきます。他にもっといいちゃんとした方法などあったら是非教えていただきたいです。

開発環境

  • CentOS 6.5
  • rvm 1.25.22
  • Ruby 1.9.3 2.0.0 2.1.0

やってみること

  • CentOSのjenkinsサーバーの『jenkins』ユーザーにrvmをインストール
  • rvmを使ってRubyを複数インストール(今回は1.9.3, 2.0.0, 2.1.0をインストール)
  • jenkinsのジョブを作成・設定(1つのジョブで複数環境実行・プラグインは使わない)
  • Githubのリポジトリのdevelopブランチにプッシュしたらテストを実行する

っと流れ的にはこんな感じ。rvmのプラグインがあったけれど、1つのジョブで1つのバージョンしか実行できなかったのでプラグインを使わず、スクリプトで無理やりやっちゃいました。

rvmのインストール

まず、Jenkinsのサーバーにrvmをインストールするわけだけど、グローバルなところにインストールするのではなく、jenkinsユーザーのホームディレクトリにインストールすることにしました。

sudoコマンドするのもめんどうなのでjenkinsユーザーにスイッチしようとしたけれどできない。どうやらyumでインストールしたjenkinsではデフォルトでは『/bin/falseとなっていてシェルでログインできないようになっているみたい。』

そのためにまず、『/etc/passwd』ファイルのjenkinsの1行を編集する必要がある。

jenkins:x:496:497:Jenkins Continuous Build server:/var/lib/jenkins:/bin/bash

てなわけで、こんなかんじで、/bin/bashみたいに編集する。これであとは『su – jenkins』でスイッチできるようになった。

ではやっと『rvm』をインストールする

bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

↑のコマンドを実行すると、ホームディレクトリに『.rvm』ディレクトリができる。一度rootに戻ってもう一度、jenkinsユーザーにスイッチすれば『rvm』コマンドが使えるようになっている。

rvm -v

とかで確認してみるといい。

Rubyをインストールする

それじゃあ早速Rubyをインストールしてみる。

rvm install 1.9.3
rvm install 2.0.0
rvm install 2.1.0

上記コマンドで各々のRubyのバージョンをインストールする。

インストール後は『jenkins』ユーザーで『ruby』コマンドを実行した時にホームディレクトリのrvm内のRubyが実行されているかを確認しておく。自分の場合は特に何も設定せずに済んだ。

> rvm use 1.9.3
> which ruby
~/.rvm/rubies/ruby-1.9.3-p545/bin/ruby

↑の用な感じで確認はできる。

Jenkinsのジョブを設定する

では、実際にjenkinsのジョブを設定する。

『ビルド』のところでは『シェルの実行』を選択し、以下の様なスクリプトを登録した。

#!/bin/bash -e
export LC_CTYPE=en_US.UTF-8 
export LANG=en_US.UTF-8


# load rvm
source "$HOME/.rvm/scripts/rvm"

# installed ruby versions
rvm list




rvm use 1.9.3
ruby -v
bundle install --path vendor/bundler
bundle exec rspec spec
rm -rf .Gemfile.lock
rm -rf vendor/bundler
echo
echo

rvm use 2.0.0
ruby -v
bundle install --path vendor/bundler
bundle exec rspec spec
rm -rf .Gemfile.lock
rm -rf vendor/bundler
echo
echo

rvm use 2.1.0
ruby -v
bundle install --path vendor/bundler
bundle exec rspec spec
rm -rf .Gemfile.lock
rm -rf vendor/bundler
echo
echo

なかなかブサイクなスクリプトになっている。『Gemfile.lock』を削除する必要があるのかは今思えばよくわからない。

あと、スクリプトがらみで色々苦しんだので個別にメモを

テストがコケているのにjenkinsが赤色にならない。

とりあえず、ここから。これに関してはテストのコードだけでなく、シェルのコマンドが見つからない場合も同じ現象になった。

解決策としては

#!/bin/bash -e

これを1行目に追加してあげれば治った。『-e』オプションがないと、エラーコードが履かれた際にスクリプトが中断されないみたい。

Rubyソースのエンコーディングでエラーが発生する

これに関しては環境変数を設定してあげることでなおった

export LC_CTYPE=en_US.UTF-8 
export LANG=en_US.UTF-8

rvmが実行できない!

これにかんしては

# load rvm
source "$HOME/.rvm/scripts/rvm"

を追加することで直した。たしかに同じような処理が『./bash_profile』にも追加されていた。

以上でとりあえずビルドを実行して、期待していた結果を得ることができた。

あとは、それぞれのRubyのバージョンでBundlerのアップデートをしておくほうがいい。自分がやった時は2.1.0のbundle installが失敗したので。

Githubのプッシュ時にテストを実行するようにする

あとは、Githubのリポジトリの『develop』ブランチにプッシュすればJenkinsが自動でテストを実行できるようにする。

Jenkins側の設定

1.Gitをプラグインのインストール

2.『ソースコードの管理』でGitを選択、Repository URLにGithubのリポジトリを指定。『Branches to build』に『*/develop』を入力

3.『ビルド・トリガ』で『SCMをポーリング』にチェックを入れる

Jenkins側の設定は以上

Github側の設定

1.リポジトリの『Settings』から『Webhooks & Services』に切り替える。『Configure services』のボタンを押して『Jenkins(Git plugin)を選択する』

※Jenkins(GitHub plugin)の方ではないので注意。

2.JenkinsURLに『http://xxxxxxx.net』のような形でjenkinsサーバーのURLを入力する。

これであとは『develop』ブランチに変更を加えるだけで自動でテストが走ってくれるようになった。

特に何か認証やAPIトークンを必要としていないのでそのへん不安はあるけれど、簡単に実装できてとりあえず満足である。

あとがき

これであとは、テストがパスしたらmasterブランチにマージする。などの処理をJenkinsに任せたいところである。そのへんはまた後日。

なんやかんやで朝になるまでJenkins&GitHub&rvmと戦ったりして疲れたので今日はここまで、ここに辿り着くまでにJenkinsのログイン認証を誤ってしてまって、権限をすべて失ったりと隠された苦労もあるのだ。

おすすめ書籍

Jenkins実践入門 ~ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
佐藤 聖規 和田 貴久 河村 雅人 米沢 弘樹 山岸 啓
技術評論社
売り上げランキング: 17,394
The RSpec Book (Professional Ruby Series)
David Chelimsky Dave Astels Zach Dennis
翔泳社
売り上げランキング: 231,416

関連記事

410120560471

ソーシャルサイト上でのサイトURLのシェア数を取得するRubyGemライブラリ『social_counter』を公開しました

まえがき 特定のサイトURLがTwitterやFacebookやはて...

記事を読む

RubyのTwitterAPIでリストのタイムラインを取得する方法

まえがき TwitterAPIでリストのタイムラインを取得するための...

記事を読む

Phing×JenkinsでビルドされたレポートをAmazonS3に自動アップロードする

まえがき JenkinsのPublish HTMLプラグインなんかを使...

記事を読む

converted 5

Rubyの軽量WEBフレームワーク『Sinatra』の入門の入門

まえがき 今回はちょっとしたつくりたいものがあったのでRubyのWE...

記事を読む

Vagrantの仮想マシン内のRubyバージョンを2.0にした時のメモ

まえがき 結構久しぶりのめも。ここ1周間モンハン4で忙しかったためブ...

記事を読む

新着記事

no image

PHPでRubyのirbっぽいインタラクティブなスクリプトが実行できる「boris」

まえがき PHPでもRubyのirbみたいなことがしたくて探してみたと...

記事を読む

2015年の抱負と去年の振り返り〜よちよちWEB業界1年経験して〜

まえがき あけましておめでとうございます。今年もどうぞよろしくお願いし...

記事を読む

Java SE 7 Bronze試験(1Z0-802)を受けてきました

まえがき 以前から少し受けてみたかった試験『Java SE 7 Bro...

記事を読む

HubotでJenkinsのジョブを実行する

まえがき HubotをつかってJenkinsのジョブをじっこうしてみた...

記事を読む

no image

Hubotをforeverでデーモン化する

まえがき 今回はHubotをforeverを使ってデーモン化してみた時...

記事を読む

スポンサーリンク

  • Sorry. No data so far.

PAGE TOP ↑