2012年6月3日日曜日

Travis CI使ってみた

rosrubyのテスト実行環境が欲しかったので、Travis CIを使って見ました。

Travis CIは継続的インテグレーションをクラウド上で行うサービスです。

継続的インテグレーションというのは、ソフトを少しでも書き換えるたびに
すべてのテストを自動でやり直す仕組みだと思います。
普通はJenkinsとか使うんだと思いますが、個人だとサーバーとかないし、
オープンソースならTravis CIを使うのがナウいみたいです。

Travis CIは様々な言語に対応しており、例えば、rubyの1.8, 1.9, jruby1.8など、同じ言語でも異なるヴァージョンでテストできたりします。

基本的にGitHubとの連携で使うみたいです。

ここの解説が詳しくていいです。
http://mochizblog.heroku.com/21

.travis.ymlというYAMLファイルに設定を記述します。
私の環境だと↓のような感じ。

language: ruby
rvm:
 - 1.8.7
 - 1.9.3
 - jruby-18mode # JRuby in 1.8 mode
env:
 - ROS_MASTER_URI=http://localhost:11311 ROS_PACKAGE_PATH=$HOME RUBYLIB=$HOME/builds/OTL/rosruby/rosruby/lib
  • rvm rubyの実行環境の切り替えの設定
  • env 環境変数の切り替えの設定。複数ある場合は横にならべる。
rubyで、version1.8.7, 1.9.3, jrubyの1.8モードでビルドします。
envに複数書くと、それとversionの掛け算の数だけタスクが生成されます。
つまり、

  • 1.8.7 & ENV1
  • 1.9.3 & ENV1
  • jruby & ENV1
  • 1.8.7 & ENV2
  • 1.9.3 & ENV2
  • jruby & ENV2
の6回テストしてくれる。

なお、実行されるコマンドは言語ごとに違いますが、rubyの場合は、リポジトリのルートで
$ bundle exec rake
が実行されます。

なので、Gemfileに必要なgemを入れて(rakeを含む)、rakeでテストが走るようにしておけばOK。 rake testではないのがポイント。
Gemfileは以下のようにしてみました。rakeもいれないといけないって書いてありました。

source 'https://rubygems.org'
gem 'rosruby_msgs'
gem 'rake'
gem 'yard'

# ここからはROS情報

なお、rosrubyはテストの実行にroscoreとROSのメッセージファイルを必要とします。
Travis CIではaptで必要なソフトを入れられるんですが、本家とlaunchpadのみ。
で、ROSは独自なので困りました。
そこで、ノリで
  • ruby版のroscoreの作成
  • gemでrosruby_msgs(rosruby用コンパイル済みメッセージ)を公開
という2つをやりました。
gem install rosruby_msgsでrosrubyであらかたコンパイルしたメッセージがインストールできるようにしました。(ほとんど意味ないです。)

ruby版roscoreは簡単かと思いましたが案外難しかった。仕様が明らかじゃないし。

0 件のコメント:

コメントを投稿