CruiseControl.rb で Continuous Integration


・準備
http://rubyforge.org/frs/?group_id=2918 より最新版のパッケージを取得し、$/HOME で解凍

% cd ~/
% tar xvzf cruisecontrol-1.4.0.tgz

以上で終了!!
Railsアプリなので、RubyGemsが必要。
 必須ではないが、Rakeが入れてあると更に便利


・プロジェクトを登録

% cd cruisecontrol-1.4.0
% ./cruise add プロジェクト名 --url  --username <ユーザー名>  --password <パスワード>

※ Mercueialを使用するときは、 --source-control hg を指定する


以下のディレクトリ構造でファイル群が生成される

$HOME/.cruise .. cruisecontrolのデータディレクトリ
  + projects/プロジェクト名 ... 登録したプロジェクト
    + work ... 指定したsvnリポジトリをチェックアウトしたもの

※ $HOME/.cruise を変更するには、環境変数 CRUISE_DATA_ROOT を定義する


・設定ファイルの編集
$HOME/.cruise/projects/プロジェクト名/cruise_config.rb がビルドタスクの設定ファイル
シェルスクリプトを走らせる場合は、下記のように記述する

Project.configure do |project|
  project.build_command = './foo.sh'     #※ $HOME/.cruise/projects/project-name/work がカレントディレクトリ
end


・サーバー起動

% LANG=C ./cruise start

daemonとして起動するときは、

% LANG=C ./cruise start --daemon


http://localhost:3333 でプロジェクトビューに。

メールの設定をする

ローカルにメールサーバーが立ち上がっていない場合は、下記の設定を行う。

・~/.cruise/site_config.rbでSMTPを設定

ActionMailer::Base.smtp_settings = {
  :address => "xx.xx.xx.xx"
}

※変更後は、CruiseControlを再起動する必要がある


・メールヘッダを変えるには
ユーザーが変える手段は用意されていないので、ソースを直接変更する

app/models/build_mailer.rb 4行目

@subject = "[CruiseControl] #{subject}"

の部分を変更する

Subversionの更新時のタイムゾーン修正

Subversion更新ログの +0900 部分がシカトされているので、無理矢理補正

lib/source_control/subversion/revision.rb

        @author, @time, @message, @changeset = author, time, message, changeset
+        @time = @time.new_offset(Rational(9,24)) if @time
      end

■参考
http://journal.mycom.co.jp/articles/2007/03/28/CruiseControlrb/index.html

http://w.koshigoe.jp/study/?[CI]%20CruiseControl.rb