加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何让我的rake任务让Jenkins知道构建失败了?

发布时间:2020-12-17 02:35:00 所属栏目:百科 来源:网络整理
导读:我们刚刚为我们的应用程序 HiringThing设置了Jenkins CI服务器 一切都运行良好,当代码被检入我们的Github仓库时,构建会自动启动. 问题是检测构建失败.我从Jenkins命令行运行以下rake任务. rake test:browser 运行以下 desc "Run browser tests."task :browse
我们刚刚为我们的应用程序 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脚本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读