2012-01-13 59 views
3

我們剛剛成立了一個詹金斯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 

這似乎與一失敗碼退出耙和警報詹金斯的構建沒有成功做的伎倆。

回答

4

即使system調用失敗,您的任務正在返回正常執行狀態。

爲了讓你的CI服務器得知有什麼問題,進程應該返回一個錯誤執行代碼。

請注意,舉例來說,如果在任何情況下出現錯誤,cucumber和rspec都會受到打擊。

您應該檢查system調用返回值,並使您的任務返回相同或在相同的ruby進程中運行測試,而不是調用另一個ruby腳本的system

相關問題