Jenkinsとの継続的インテグレーション
JenkinsとRVMを統合することで、異なるgemsetを持つ複数のプロジェクトをテストできるだけでなく、複数のRubyに対して様々なコードベースを同時にテストすることもできます。以下のガイドは主にUbuntuインストールに基づいていますが、手順はどのプラットフォームでも互換性があるはずです。
これらの手順は、ThoughtbotブログのNick Quarantoによる優れたブログ記事に基づいており、より汎用的な用途に適応させたものです。
概要
一般的に、以下のことが必要です。
- Jenkinsを特別なユーザーとして設定する
- RVMを設定する(オプションで、Rubyを自動的にインストールするためのRVM設定を含む)
- 可能な限りrvmrcを使用する/シェルのタスクで`-e`をshebangに渡してbundle installを実行する。
- RVMが利用できない場合は、手動でRVMをソースする。
より詳細なガイドについては、以下を参照してください。
ステップ1. Jenkinsの取得とインストール
最初のステップは、選択したシステムにJenkinsをインストールすることです。現在、いくつかの方法があります。
- OSレベルのパッケージによるインストール(今回の場合、Debianパッケージ)
- 手動でのダウンロードと設定
- jenkins.rbの使用(一般的なプラグインなどをバンドル)
方法2または3を選択した場合、最初にJenkins用の新しいユーザー(通常は「jenkins」)を作成する必要があります。今回は、公式Jenkins Webサイトの手順に従って、最初のオプションを使用します。この方法は、init.dの自動設定とjenkinsユーザーの自動作成を行います。
手動で設定する場合は、提供される利便性のためにjenkins.rbを介してJenkinsをインストールすることをお勧めします。
ステップ2. RVMの設定
次のステップは、おそらく最も重要なステップです。最後のステップで追加されたJenkinsユーザーのためにRVMを実際に設定する必要があります。まず、すべての依存関係をインストールする必要があります。RVMは、各Rubyのビルドに必要なアイテムを自動的にインストールします。
sudo apt-get install curl bison build-essential zlib1g-dev libssl-dev libreadline5-dev libxml2-dev git-core
JRubyに対してもCIを実行する場合は、JDKを含む追加のパッケージをインストールする必要があります。詳細は上記でリンクされているUbuntuページを参照してください。
次に、Ubuntuユーザー(この場合はjenkins)としてログインする必要があります。
sudo -Hiu jenkins
これで、bashがロードされたシェルが表示されます。RVMインストールページの手順を実行できます。RVM-install-headメソッドを使用して、Jenkinsユーザーのみに設定することを強くお勧めします。
次に、シェルプロファイルにRVMを追加する必要があります。この場合は、次を`~/.bashrc`の最後に追加します。
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
また、Ubuntuではデフォルトの`.bashrc`に`"&& return"`を含む行があります。あなたのシステムでも同じであれば、RVMインストールで指示されているように、それをifに置き換えてください。
最後に、jenkinsとしてログアウトして再度ログインすると、RVMがロードされるはずです。`rvm`と入力して確認できます。
type rvm | head -1
結果は「rvm is a function」となります。
最後に、実際の処理を一般的に容易にするために、Jenkinsユーザーとして`~/.rvmrc`に次の行を追加します。
rvm_install_on_use_flag=1 rvm_project_rvmrc=1 rvm_gemset_create_on_use_flag=1
それぞれの意味については、rvmrcページを参照してください。このページでは、それぞれについて詳細に説明しています。この方法の一般的な考え方は、最初にRuby/gemsetを使用すると、RVMが自動的にRubyをインストールし、gemsetを作成することです。
ステップ3. Jenkinsの設定/プロジェクトの追加
実際の作業には、Jenkinsでシェルスクリプトを実行する機能を使用します。
推奨される設定は、Jenkinsの「シェルスクリプトの実行」オプションを使用して、次のようなスクリプトを使用することです。
#!/bin/bash # Use the correct ruby rvm use "ruby@gemset" # Set "fail on error" in bash set -e # Do any setup # e.g. possibly do 'rake db:migrate db:test:prepare' here bundle install # Finally, run your tests rake
`-e`オプションにより、コマンドがエラーで終了した場合、bashは終了します。これは、スクリプトが期待通りに動作するために重要です。
一部の設定では、環境が正しくロードされない場合があります。このような場合は、shebangの下に次の行を追加する必要があります。
source "$HOME/.rvm/scripts/rvm"
マトリックスビルドを使用する場合は、この方法により、環境変数(例:`build_ruby`)を定義し、使用する各Rubyをマトリックスフィールドに設定し、`rvm use`行を次のように置き換えることができます。
rvm use "$build_ruby@gemset-to-use"
Gitリポジトリからクローンを作成する場合は、JenkinsユーザーのSSHキーを追加する必要があります。
最後に、`rvmrc`から自動的にRubyを使用したり、そのように設定を処理したい場合は、
[[ -s ".rvmrc" ]] && source .rvmrc
`rvm use`コマンド/関連する設定の代わりに追加できます。