HudsonもといJenkinsは昔からよく使っていますが、全くそれに関するエントリーをあげていないことに気がつきました。ということで、暫くJenkins強化週間です。まずはお決まりのインストールメモから。Java用だと一瞬で終わってしまうので、Rubyで使用することを想定しています。
RVMのインストール
Amazon Linux AMIでRubyであれば、何はなくてもRVMをインストールします。yumでインストールするリポジトリについては、もう少し絞れると思います。
$ sudo su - # yum -y install git # yum -y groupinstall "Development Tools" # yum -y groupinstall "Development Libraries" # yum -y install libxslt-devel # yum -y install sqlite-devel # yum -y install libyaml-devel # \curl -L https://get.rvm.io | bash -s stable --ruby # echo '[[ -s "/usr/local/rvm/scripts/rvm" ]] && . "/usr/local/rvm/scripts/rvm" # Load RVM function' >> /etc/bashrc # source /etc/bashrc # yum -y install rake
ちなみにruby2.0リリース以降、rvmは2.0をデフォルトでインストールするようになりました。
jenkinsユーザでの設定
正しい手順(※)か自信はないのですが、jenkinsユーザでrvmの設定をする必要があります。yumでインストールした場合、jenkinsユーザは、ログイン出来なくなっています。/etc/passwdを編集してログイン出来るようにします。その後に、rvmとrakeをインストールします。
※管理設定のところのrakeの設定をどうしても読んでくれないのです。
jenkins:x:220:499:Jenkins Continuous Build server:/var/lib/jenkins:/bin/false
jenkins:x:220:499:Jenkins Continuous Build server:/var/lib/jenkins:/bin/bash
$ rvm install 1.9.3 $ rvm default 1.9.3 $ rvm use 1.9.3 $ gem install rake
Jenkinsのインストール
Jenkinsは、Javaで動きます。更にバイナリーの場合、JavaのAppサーバーが含まれています。ですので、簡単にインストール&起動出来ます。
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 -y install jenkins
起動&自動起動の設定
sudo service jenkins start sudo chkconfig jenkins on
Ruby用のプラグインのインストール
Jenkins起動後にWebのUIから、Rubyのプラグインをインストールします。最低限必要なのが、ruby,rvm,rakeのプラグインです。他にあった方が良いプラグインとしては、ruby metricsやgit client,GitHub API Pluginを入れておくと幸せになれると思います。インストールに成功していたら、8080ポートでアクセス出来るはずです。
http://your_ec2_address:8080/
アクセス後に、"Jenkinsの管理->プラグインの管理"で必要なプラグインをインストールします。
Rake plugin
Ruby Plugin
RVM Plugin
Railsプロジェクトの作成とJenkinsのジョブ登録
通常通りRailsプロジェクトを作成後、Git等でバージョン管理してください。リポジトリ作成後に、Jenkinsのプロジェクト作成を行います。フリースタイル・プロジェクトのビルドで、ジョブ名を適当につけます。
![f:id:dkfj:20130302180947p:image f:id:dkfj:20130302180947p:image](http://cdn-ak.f.st-hatena.com/images/fotolife/d/dkfj/20130302/20130302180947.png)
設定画面で詳細の設定を行います。まずはリポジトリの参照。任意のリポジトリを指定してください。今回は、GitHubを使っています。
![f:id:dkfj:20130302180948p:image f:id:dkfj:20130302180948p:image](http://cdn-ak.f.st-hatena.com/images/fotolife/d/dkfj/20130302/20130302180948.png)
Rubyの指定も行います。
![f:id:dkfj:20130302180949p:image f:id:dkfj:20130302180949p:image](http://cdn-ak.f.st-hatena.com/images/fotolife/d/dkfj/20130302/20130302180949.png)
プロジェクトの設定
どうやっても、RVMプラグイン経由でのInvoke Rakeが実行出来ないので、シェルの実行で行うことに。
source /var/lib/jenkins/.bashrc
which bundle || gem install bundler
bundle install
bundle exec rake db:migrate
bundle exec rake
トラブルシューティング
Rakeプラグインでrakeが実行出来ない。こちらは、グローバルの設定画面でrakeのパスを指定することで解決します。
Using /var/lib/jenkins/.rvm/gems/ruby-1.9.3-p392
[workspace] $ rake spec
FATAL: rake execution failed
java.io.IOException: Cannot run program "rake" (in directory "/var/lib/jenkins/jobs/ビルド/workspace"): java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:475)
at hudson.Proc$LocalProc.(Proc.java:244)
at hudson.Proc$LocalProc.(Proc.java:216)
at hudson.Launcher$LocalLauncher.launch(Launcher.java:763)
at hudson.Launcher$ProcStarter.start(Launcher.java:353)
at hudson.Launcher$ProcStarter.join(Launcher.java:360)
at hudson.plugins.rake.Rake.perform(Rake.java:141)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:814)
at hudson.model.Build$BuildExecution.build(Build.java:199)
at hudson.model.Build$BuildExecution.doRun(Build.java:160)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:593)
at hudson.model.Run.execute(Run.java:1567)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:237)
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.(UNIXProcess.java:164)
at java.lang.ProcessImpl.start(ProcessImpl.java:81)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:468)
... 15 more
Build step 'Invoke Rake' marked build as failure
Finished: FAILURE
Rakeプラグインでrakeが実行出来ない。その2。今のところ解決策が解っていません。誰か教えてください。
[workspace] $ /var/lib/jenkins/.rvm/rubies/ruby-1.9.3-p392/bin/rake spec
/var/lib/jenkins/.rvm/rubies/ruby-1.9.3-p392/bin/rake:34:in `require': no such file to load -- rake (LoadError)
from /var/lib/jenkins/.rvm/rubies/ruby-1.9.3-p392/bin/rake:34
Build step 'Invoke Rake' marked build as failure
Finished: FAILURE
まとめ
JenkinsはJava用のものとの印象が強いですが、Jenkinsは汎用の継続的インテグレーションツールです。プラグインも充実して安定しているので、是非トライしてみましょう。継続的デリバリーの第一歩は、CIの導入だと思います。
See Also:
Amazon Linux AMIにGit + Gitolite + Gitlabをインストールして、プライベートGitHubを構築する
Amazon-LinuxにRVMを利用してApache+Passenger+Railsのインストール
Jenkinsでビルド・パイプラインを構築する
参照:
Installing Jenkins on Red Hat distributions - Jenkins - Jenkins Wiki
Rubyアソシエーション: Jenkins
Jenkins CIでRSpecを自動実行する - どっかのBlogの前身のような