我們剛剛成立了一個詹金斯CI服務器爲我們的應用程序,HiringThing如何讓我的耙子任務讓Jenkins知道構建失敗?
一切運作良好,當代碼簽入我們的GitHub庫與建立自動啓動。
問題是檢測構建失敗。詹金斯從命令行運行以下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)的問題是,詹金斯不會在瀏覽器中測試檢測到任何構建失敗。它似乎適用於通常的Rails單元,功能和集成測試(我在Jenkins之前在此任務中運行「rake測試」。)
據我所知,上面的腳本沒有通過失敗的退出代碼對詹金斯的紅寶石任務,不知道爲什麼。現在我能想到的唯一解決方法是將所有測試輸出重定向到緩衝區,並使用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
這似乎與一失敗碼退出耙和警報詹金斯的構建沒有成功做的伎倆。