现在很多agile development 开发团队在多人协作开发的时候,经常用到CI,在java中常用的CI工具有Hudson,cruisecontrol等,rails的项目我们可以用cruisecontrol.rb,它遵循Rails项目一贯的“convention over configuration”原则,CC.rb也允许你以非常简单的方式指定这些设置——没有XML,配置都是你熟悉的Ruby代码。下面我们实践下如何集成rspec去做ci:
##首先我们需要下载和解压cruisecontrol.rb
##把我们的rails项目添加到cruisecontrol.rb中,执行如下命令:
$ cd #cruise_dir/ #你的cruisecontrol.rb的安装目录
$ ./cruise add everyday --source-control git --repository git@github.com:tim-tang/everyday.git
##以上命令会做如下输出:
cruise data root = '/home/tim-tang/.cruise' #你以后的所有项目都会在这个目录下
RAILS_ROOT = /home/tim-tang/Documents/thoughtworks-cruisecontrol.rb
Adding project 'everyday' (this may take a while)...
Project 'everyday' added.
##下面就是与rspec集成了,cruisecontrol.rb默认build的时候仍然执行Rails自带的test cases:
rake db:test:purge
rake db:migrate
rake test
##我们需要创建自己的rake,#rails_app/lib/tasks/custom_cc.rake:
desc 'Custom curise task for RSpec'
task :cruise do
ENV['RAILS_ENV'] = 'test'
if File.exists?(Dir.pwd + "/config/database.yml")
if Dir[Dir.pwd + "/db/migrate/*.rb"].empty?
raise "No migration scripts found in db/migrate/ but database.yml exists, " +
"CruiseControl won't be able to build the latest test database. Build aborted."
end
if Rake.application.lookup('db:migrate')
Rake::Task['db:migrate'].invoke
end
end
Rake::Task['spec:rcov'].invoke
if Rake.application.lookup('db:test:purge')
Rake::Task['db:test:purge'].invoke
end
end
##具体的rspec集成rails使用可以看这里Rails3,Rspec,Factory_girl单元&功能测试
##到这里我们提交修改,启动cc.rb:
$ cd #cruise_dir/
$ ./cruise start
##服务启动之后cc.rb自动回去github拿代码,运行测试,下面看看结果,访问http://localhost:3333:
##cc.rb会记录没次buildlog,和测试情况,以及提交的情况。
##我在ci中常用的功能是当build失败或成功之后发送邮件,下面看如何配置这些,修改~/.cruise/site_config.rb:
..
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:authentication => :plain,
:user_name => "tang.jilong",
:password => "123",
:enable_starttls_auto => true
}
..
##还要修改~/.cruise/projects/everyday/cruise_config.rb,去掉注释:
project.email_notifier.emails = ['tang.jilong@139.com', 'tang.jilong@gmail.com']
project.email_notifier.from = 'tang.jilong@gmail.com'
##对于像如何定时,多长时间检查github都可以在这里配置,不详述。
10 November 2011 Suzhou, China到这里一个简单的CI环境就有了,我们还可以完善如将metrical/rcov生成的测试报告自动放到#rails_app/public目录下方便查看,自动启动#rails_app等等…(原创文章)