Rails4とJenkinsとGitHubの設定


はいどうも。週末ニートのさいさです。
社会人になったことだし、いよいよもってテスト書かなきゃなと思って来たので、とりあえずRails4で何かやってみるかって感じで。
さくらのVPSで動いているCentOS6.4に構築する。

1. Jenkinsサーバの構築

$ sudo yum groupinstall "Development Tools"
$ sudo vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=0 
enabled=1

$ sudo yum install nginx
$ sudo service nginx start
$ sudo chkconfig nginx on
$ sudo yum install java-1.6.0-openjdk java-1.6.0-openjdk-devel
$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ sudo yum install jenkins
$ sudo vi /etc/sysconfig/jenkins 

JENKINS_PORT="XXXXX"
JENKINS_ARGS="--prefix=/jenkins --httpPort=${JENKINS_PORT} --ajp13Port=${JENKINS_AJP_PORT}" 

$ sudo vi /etc/nginx/conf.d/jenkins.conf

server {
        listen 80;
        server_name hoge.com;
        location /jenkins {
                proxy_pass http://localhost:XXXXX;
        }
}

$ sudo /etc/init.d/nginx restart
$ sudo service jenkins start
$ sudo chkconfig jenkins on

2. システムワイドにrbenv
Jenkinsユーザがテストを実行するため、グローバルな場所にrbenvをおいておく。
(だったらyumか何かでいいんじゃね?とも思う)

$ cd /usr/local/
$ sudo git clone git://github.com/sstephenson/rbenv.git rbenv
$ sudo groupadd rbenv
$ sudo chgrp -R rbenv rbenv
$ sudo chmod -R g+rwxXs rbenv
$ cd rbenv/
$ sudo git clone git://github.com/sstephenson/ruby-build.git
$ sudo chgrp -R rbenv ruby-build/    
$ sudo chmod -R g+rwxs ruby-build/ 
$ sudo vi /etc/profile.d/rbenv.sh

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"
$ source ~/.bash_profile 
$ sudo reboot
$ sudo yum install sqlite sqlite-devel
$ sudo yum install readline-devel openssl-devel
$ sudo usermod -G wheel,rbenv saisa
$ sudo usermod -G wheel,rbenv jenkins 
$ rbenv install 2.0.0-p247

3. jenkins設定

$ sudo -u jenkins -H ssh-keygen -t dsa -C hoge@hoge.fuga
$ sudo -u jenkins git config --global user.email "hoge@hoge.fuga"
$ sudo gpasswd -a jenkins rbenv
$ gem i bundler

4. GitHubとの連携設定(JenkinsのGUIで)
Jenkins GitHub で調べて適当に設定
こことか見たと思うけど金曜日の30時くらいだったからよく覚えていない。
Jobを作成して以下の設定
Source Code ManagementでGitを選択、Repositoriesはgit://github.com:account_name/repository_name.gitで。
Build Enviromentで"rnenv build wrapper"にチェック、rubyのハージョンはrbenvでシステムワイドにインストールした2.0.0-p247を指定。
BuildではExecute shellを追加し、コマンドは

export PATH="/usr/local/rbenv/bin/rbenv:$PATH"
eval "$(rbenv init -)"
rbenv exec bundle install --path vendor/bundle
rbenv exec bundle exec rspec

あとGitHubの自分のアカウントに/var/lib/jenkins/.ssh/id_dsa.pubを登録して、WebHookのチェックを入れて何か設定したと思う。
これらが終わったらJenkinsでビルドを実行し、pullされてrspecとかが走るかを確認。
動かないのも寂しいので、Build TriggersでBuild periodicallyを毎時0分に設定した。
この定時実行ビルドだけが走っている。虚しい。

5. Rails4的なCI環境を整える
ルビまによると、時代は

ユニットテスト: minitest
End2Endテスト: Gherkin + Turnip
ブラウザテスト: Capybara + capybara-webkit

らしい。
しかしcapybara-webkitのbundle installでエラー。

NetworkReplyProxy.cpp: In constructor ‘NetworkReplyProxy::NetworkReplyProxy(QNetworkReply*, QObject*)’:
NetworkReplyProxy.cpp:15: error: ‘setFinished’ was not declared in this scope
NetworkReplyProxy.cpp: In member function ‘void NetworkReplyProxy::handleFinished()’:
NetworkReplyProxy.cpp:37: error: ‘setFinished’ was not declared in this scope
make[1]: *** [NetworkReplyProxy.o] Error 1
make[1]: Leaving directory `/home/saisa/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/capybara-webkit-1.0.0/src'
make: *** [sub-src-webkit_server-pro-make_default-ordered] Error 2
Command 'make' failed

make "DESTDIR="
cd src/ && make -f Makefile.webkit_server
make[1]: Entering directory `/home/saisa/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/capybara-webkit-1.0.0/src'
g++ -c -include webkit_server -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_WEBKIT_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/lib64/qt47/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtNetwork -I/usr/include/QtGui -I/usr/include/QtWebKit -I/usr/include -I. -o NetworkReplyProxy.o NetworkReplyProxy.cpp
NetworkReplyProxy.cpp: In constructor ‘NetworkReplyProxy::NetworkReplyProxy(QNetworkReply*, QObject*)’:
NetworkReplyProxy.cpp:15: error: ‘setFinished’ was not declared in this scope
NetworkReplyProxy.cpp: In member function ‘void NetworkReplyProxy::handleFinished()’:
NetworkReplyProxy.cpp:37: error: ‘setFinished’ was not declared in this scope
make[1]: *** [NetworkReplyProxy.o] Error 1
make[1]: Leaving directory `/home/saisa/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/capybara-webkit-1.0.0/src'
make: *** [sub-src-webkit_server-pro-make_default-ordered] Error 2

ここで報告がされていて
ここを見て解決

$sudo vi /etc/yum.repos.d/qt48.repo

[epel-qt48]
name=Software Collection for Qt 4.8
baseurl=http://repos.fedorapeople.org/repos/sic/qt48/epel-$releasever/$basearch/
enabled=1
skip_if_unavailable=1
gpgcheck=0
[epel-qt48-source]
name=Software Collection for Qt 4.8 - Source
baseurl=http://repos.fedorapeople.org/repos/sic/qt48/epel-$releasever/SRPMS
enabled=0
skip_if_unavailable=1
gpgcheck=0

$ sudo yum install qt48-qt-webkit-devel
$ sudo ln -s /opt/rh/qt48/root/usr/include/QtCore/qconfig-64.h  /opt/rh/qt48/root/usr/include/QtCore/qconfig-x86_64.h
$ source /opt/rh/qt48/enable
$ export PATH=/opt/rh/qt48/root/usr/lib64/qt4/bin/${PATH:+:${PATH}}
$ bundle install --path vendor/bundle

本当はGitHubにpushして自動テスト通ったらステージングに自動デプロイされるところまで作りたかったけど、圏論とかRiakをダラダラ調べていたら3連休があっという間に終わってしまた。
残りの環境を揃えたら、次はCRUDを備えた一行掲示板をテストと共に作ってみたい。