【发布时间】:2012-01-13 18:03:04
【问题描述】:
我们刚刚为我们的应用设置了一个 Jenkins CI 服务器,HiringThing
一切正常,当代码签入我们的 Github 存储库时,构建会自动启动。
问题在于检测构建失败。我有以下 rake 任务正在由 Jenkins 从命令行运行。
rake test:browser
运行以下
desc "Run browser tests."
task :browser => :environment do
start = Time.now()
puts "Stopping apache if running"
system 'sudo apache2ctl stop'
puts "Running selenium tests"
Dir.glob('./test/browser/*.rb').each { |r|
puts r
system 'rvmsudo ruby ' + r
}
system 'echo -e "\a"'
puts "All browser tests, elapsed: " + (Time.now() - start).to_s + " seconds"
end
我已经确认测试运行正常(使用带有 Xvfb 的无头 Firefox)问题是 Jenkins 在浏览器测试中没有检测到任何构建失败。它似乎适用于通常的 Rails 单元、功能和集成测试(我在执行此任务之前在 Jenkins 中运行“rake 测试”。)
据我所知,上面的这个脚本没有将 ruby 任务的失败退出代码传递给 Jenkins,不知道为什么。现在我能想到的唯一解决方法是将所有测试输出重定向到缓冲区并使用 grep 查找失败关键字并在找到时传递失败的退出代码,但这对我来说感觉很糟糕。
我需要进行哪些更改才能让 Jenkins 检测“system 'rvmsudo ruby' + r”命令何时返回失败的退出代码?
更新
robertodecurnex 是正确的,系统总是返回成功。但是,rake 命令“sh”允许您捕获准确的代码。所以我改变了这个:
system 'rvmsudo ruby ' + r
到这里:
sh 'rvmsudo ruby ' + r do |ok, res|
raise "Failed test." if !ok
end
这似乎是通过使用失败代码退出 Rake 并提醒 Jenkins 构建没有成功来达到目的。
【问题讨论】:
标签: ruby-on-rails ruby rake jenkins