旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

CentOS6へJasmineによるCI環境を作る(1)

2012年12月8日

さくらVPSのCentOS6へ、
JasmineによるJavaScriptのCI環境を構築する手順です
可能な限り yum を使う方針で構築しました

yum install

yum install ruby
yum install ruby-libs
yum install ruby-devel
yum install ruby-rdoc
yum install ruby-ri
yum install rubygems
yum install java-1.7.0-openjdk
yum install java-1.7.0-openjdk-devel
yum install xorg-x11-server-Xvfb
yum install firefox
yum groupupdate 'X Window System'

RubyはJasmineをGem版で入れるために必要
JavaはSeleniumサーバのために必要
Xvfb / firefox / X Window System は、仮想バッファを介してFirefoxでアクセスするために必要

※ いくつかインストール済みだったり、不要だったりすると思います。特にRuby関係
※ X Window System は、結局全部入れないと動かなかった・・・

Bundlerのインストール

BundlerというRubyGemsの便利版みたいなのをインストールします

gem install bundler

Seleniumのダウンロードと起動スクリプトの設定

jarファイルはダウンロードページから最新版を探してください

# mkdir /var/lib/selenium # 場所はテキトウ
# cd /var/lib/selenium
# wget http://selenium.googlecode.com/files/selenium-server-standalone-2.25.0.jar 
# mkdir -m 0777 /var/log/selenium # ログ用

起動スクリプトの設定をします、コードはコチラの記事をそのままいただきました
wgetで取れる位置に置いていますが、もし無くなってたら上記サイトを参照して作成して下さい

# cd /etc/init.d
# wget http://code.kjirou.net/sh/init.d/selenium.sh
# mv selenium.sh selenium
# chmod 0755 selenium
# chkconfig --add selenium
# chkconfig selenium on

Xvfbの起動スクリプトの設定

シェルスクリプトはコチラの記事をそのままいただきました
こちらもwgetで取れる位置に置いています

# cd /etc/init.d
# wget http://code.kjirou.net/sh/init.d/xvfb.sh
# mv xvfb.sh xvfb
# chmod 0755 xvfb
# chkconfig --add xvfb
# chkconfig xvfb on

start-stop-daemonのインストール

上記のXvfb起動スクリプト内で使っているためインストールします
CentOS6へstart-stop-daemonをインストールを参照して下さい

$DISPLAY環境変数の設定

テストを行いたいユーザの.bashrcや.zshrcへ、以下の環境変数を設定する

export DISPLAY=:99

dbus-uuidgen

これを実行しとかないと「machine-idが無いよ」と怒られます
何かのIDを生成しているようですが、詳細は不明

# dbus-uuidgen > /var/lib/dbus/machine-id

ここまでの動作確認

最初に忘れずに、rebootもしくは起動スクリプトを手動で叩いて、
SeleniumとXvfbを動かしてください
Gemfileの内容は何度かエラーで怒られることを繰り返して自分が作成したものです、正確ではない可能性大

mkdir jasmine_test # 何処でもいい場所に任意の名前でディレクトリを作る
cd jasmine_test
wget https://raw.github.com/kjirou/beginning_jasmine/master/Gemfile
bundle install --path vendor/bundle
bundle exec jasmine init # テスト用ファイル含む一式が生成
bundle exec rake jasmine:ci

こんな出力が出たら成功です

[2012-12-08 01:45:01] INFO  WEBrick 1.3.1
[2012-12-08 01:45:01] INFO  ruby 1.8.7 (2011-06-30) [x86_64-linux]
[2012-12-08 01:45:01] WARN  TCPServer Error: Address already in use - bind(2)
[2012-12-08 01:45:01] INFO  WEBrick::HTTPServer#start: pid=15742 port=33630
Waiting for jasmine server on 33630...
jasmine server started.
Waiting for suite to finish in browser ...
.....

Finished in 0.00409 seconds
5 examples, 0 failures

補足

  • 何でgem install jasmineじゃなくてBundlerを使うの?
    → 最初それでやったら色々な場所で素直に進まず、最終的には諦めたという経緯があります
  • Firefoxを使うのはどこで指定しているの?
     → Seleniumはデフォルトでfirefoxを使うようになっています
  • $DISPLAYって何?:99って何?
     → 自分も良くわかっていません、:99はXvfb起動スクリプト内の定義値と一致する必要があります
  • –path vendor/bundle って何?
     → Railsやcapistranoだとそうなってるみたいなので合わせただけです、何でも良いです
  • テストを実行したらGemfile.lockってのが出来たんだけど?
     → なんでしょうね? とりあえず、バージョン管理外にしとけとのことです
      もちろん–pathで指定した場所や.bundle もバージョン管理の対象外に

蛇足

全般的に良くわかってないで構築しているので、
「これ間違ってないか?」 という点があれば、おそらくはそれは間違っています
ご指摘いただけると助かります

後日、(2)でJasmine本体を使っていろいろとテストを書くことを
(3)でJenkinsなどに連携することを行います

TASみたいなことが出来ないと、CI環境で作った意味が薄くなるので
そういうのが出来ればいいなぁ、と思っています

・・・もし、HTMLを操作する動作を事細かに出来たなら
外部のブラウザゲームの寝マクロにも使えるかもなー
とか元UO廃人だと思わざるを得ませんが、もういい歳なのでダメ、ゼッタイ