読者です 読者をやめる 読者になる 読者になる

プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Amazon Linux AMIにRuby用にJenkinsをインストールする


 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のプロジェクト作成を行います。フリースタイル・プロジェクトのビルドで、ジョブ名を適当につけます。

 設定画面で詳細の設定を行います。まずはリポジトリの参照。任意のリポジトリを指定してください。今回は、GitHubを使っています。

 Rubyの指定も行います。

プロジェクトの設定



 どうやっても、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の前身のような