ruby-on-rails – 如何让我的rake任务让Jenkins知道构建失败了?
我们刚刚为我们的应用程序
HiringThing设置了Jenkins CI服务器
一切都运行良好,当代码被检入我们的Github仓库时,构建会自动启动. 问题是检测构建失败.我从Jenkins命令行运行以下rake任务. 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 test”.) 据我所知,上面的这个脚本没有将ruby任务的失败退出代码传递给Jenkins,不明白为什么.现在,我能想到的唯一解决方法是将所有测试输出重定向到缓冲区并使用grep查找失败关键字并传递失败的退出代码(如果找到),但这对我来说感觉很糟糕. 我需要更改什么才能让Jenkins检测到“system’rvmsudo ruby??’r”命令何时返回失败的退出代码? UPDATE robertodecurnex是正确的,系统总是返回成功.但是,rake命令’sh’允许您捕获准确的代码.所以我改变了这个: system 'rvmsudo ruby ' + r 对此: sh 'rvmsudo ruby ' + r do |ok,res| raise "Failed test." if !ok end 这似乎是通过使用失败代码退出Rake并警告Jenkins构建没有成功的诀窍. 解决方法
即使系统调用失败,您的任务也会返回正常的执行状态.
为了让CI服务器收到通知错误,进程应返回错误执行代码. 请注意,作为一个例子,如果在任何情况下出现错误,黄瓜和rspec将会爆炸. 您应该检查系统调用返回值并使您的任务返回相同或在同一ruby进程内运行测试,而不是系统调用另一个ruby脚本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |