gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:30:52 26 4
gpt4 key购买 nike

我们刚刚为我们的应用设置了一个 Jenkins CI 服务器,HiringThing

一切正常,当代码 checkin 我们的 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 的 headless 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 构建未成功来实现的。

最佳答案

即使 system 调用失败,您的任务也会返回正常的执行状态。

为了让您的 CI 服务器得到通知,该进程应该返回一个错误执行代码。

请注意,例如,如果在任何情况下出现错误,cucumber 和 rspec 都会失败。

您应该检查 system 调用返回值并让您的任务返回相同的值,或者在同一个 ruby​​ 进程中运行测试,而不是作为对另一个 system 的调用 ruby 脚本。

关于ruby-on-rails - 如何让我的 rake 任务让 Jenkins 知道构建失败了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8855104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com