PaaS/Travis-CI

2013年06月29日

このエントリーをはてなブックマークに追加

Travis CIでビルドテストしよう

fpm-cookeryのrecipie.rbを作ったとする。そのテストをしたくなったら、どうするか。Travis CIで出来ないか・・・と思って、やってみたら、ビルド出来た。

ところで、fpm-cookeryとは

rpmを作るには、通常、specファイルを作成してrpmbuildする。その手順を単純化しつつも、debなども美味しくビルド出来てしまうのが、fpm。これだけでもパッケージング作業の苦しみを軽減してくれる。しかし、その苦しみを更に軽減してくれるのが、fpm-cookeryだ。DSLにより、レシピを定義出来るようになっている。

仮にfpmを単体利用する場合は、fpmコマンドを実行する為のラッパースクリプトかMakefileで実行する戦略となるだろう。fpmコマンドには決して少なくはないオプションを指定する必要があり、これが結構しんどい。fpm-cookeryを使えば、recipie.rbを定義するだけで良い。

$ fpm-cookery recipie.rb

これで終わる。凄く簡単だ。

recipie.rbをテストするには

fpm-cookeryコマンドの終了ステータスコードが、

  • 0 か
  • そうでないか

これにより、recipie.rbが正しいかどうかを判断可能。ゆえに、テスト可能である。

Travis CIでビルドする

ビルドするのに必要な材料。

  • .travis.ymlファイル
  • fpm-cookery環境
  • recipie.rbファイル

fpm-cookeryはRubyで書かれているので、.travis.ymlに、rubyを指定する。

language: ruby

rubyが指定されている時、Travis CIは、Gemfileの存在を検知し、bundle installを自動的に実行してくれる。明示的に実行する必要は無い。つまり、Gemfileにfpm-cookeryを定義しさえすれば、fpm-cookery環境が手に入ってしまう。

gem 'fpm-cookery'

fpm-cookery-travis-exampleでは、fpm-cookeryのrecipie.rbを拝借した。CIワーカーに配置するため、.travis.ymlのbefore_installターゲットで git cloneを実行させている。

before_install:
 - git clone https://github.com/bernd/fpm-cookery.git

仕上げ、.travis.ymlのscriptターゲットに、bundle execを指定。 なお、ここでsudoを指定しているのは、fpm-cookery/recipe.rbが /opt 配下への書き込みをするので、root権限を付与する為である。

script:
  - sudo PATH=$PATH -E bundle exec fpm-cook fpm-cookery/recipes/fpm-cookery/recipe.rb

これでfpm-cookeryを実行するパイプラインが構築される。fpm-cookery-travis-exampleでは外部のrecipie.rbを使用しているが、recipie.rbをリポジトリに内包し、変更のたびにGitHubへpushすれば、CIが回る。

あと書き

fpm-cookery専用ビルドサーバをサービス化したら面白いんじゃないか。

  • recipie.rb登録
    • recipie.rbのURIを指定
      • recipie.rb の中身を登録(プライベートパッケージ向け)
  • ビルドが完了すると、アクセス制限付きパッケージリポジトリにデプロイ
  • メール等でアクセス手段を通知

自分が欲しいので、何か作る。




編集
@hansode at 15:30|PermalinkComments(0)TrackBack(0)
このエントリーをはてなブックマークに追加

二度と同じ失敗を犯さぬように

手元のRubyプロジェクトをTravis CIでビルドさせてみると、あっさり失敗。レポートを見ると、/opt配下にディレクトリを作成しようとして、失敗していた。この場合は、root権限が必要だ。

そこで調べてみると、Travis CIでは、sudoコマンドを使える事が判明。

The Build Environmentより

To set up the system for your build, you can use the sudo command to install packages, to change configuration, create users, and so on.

と言う事で、早速sudoコマンドを指定してみたが、見事に何度も失敗ビルド。その要因は、環境変数。良くある事ですね・・・。二度と同じ失敗を犯さぬよう、ここに書き残す。

成功ビルドの組み合せ

成功ビルドとなったコマンドの組み合せ例は、下記の通り。

$ sudo PATH=$PATH -E env
  • PATH=$PATH で環境変数PATH指定(維持)
  • -E オプションで、実行元ユーザーの環境変数を維持

快適なTravis CI生活を。

続きを読む


編集
@hansode at 13:00|PermalinkComments(0)TrackBack(0)