[Jenkins] 解決 Jenkins 誤以為單元測試的結果太舊的問題

[Jenkins] 解決 Jenkins 誤以為單元測試的結果太舊的問題

今天在建立一個 Jenkins 工作,

要檢查在另外一台電腦執行的單元測試 (unittest) 結果,

於是在「建置後動作」中,使用了「發佈 JUnit 測試結果報告」:

 

奇怪的是,執行之後,明明 result 目錄下有一堆 pytest 產生的 xml 檔案,

但 Jenkins 卻顯示下面的錯誤訊息:

ERROR: Step ‘Publish JUnit test result report’ failed: Test reports were found but none of them are new. Did leafNodes run?

 

我很確定這些 pytest xml 檔案是新產生出來的,

為什麼 Jenkins 會說這些報告檔是舊的呢?

研究了一下,發現是本機和產生 pytest xml 檔案的電腦時間沒有同步,

導致產生出來的檔案時間是比較舊的時間,

因此 Jenkins 認為這些檔案是在執行任務前就產生的…

 

修正方法,首先自然是儘量讓每台電腦都能與網路 NTP 對時,

減少各電腦間的時間誤差~

但是這還是有可能會產生某些電腦較慢或較快的問題…

 

因此我又加上了一步,強制在本機端,

使用 touch 指令,將這些 pytest xml 的時間標記設成「現在」,

這樣絕對不會有時間發生在很久以前的狀況了:

touch result/*.xml

 

使用這個方法有個好處是,

在某些狀況下,可能真的沒有跑新的單元測試,

但我想要顯示出舊的單元測試的結果。

這時候使用這個方法,就能讓 Jenkins 認為這是新的報告而顯示出來。

 

但反過來說,假設你的 Jenkins 設定有什麼問題,

導致單元測試該跑的沒有跑,

那這個方法可能會掩蓋住錯誤,每次都顯示錯誤的舊結果,

因此使用上要小心一些囉~

 

參考資料:email – How to fix “Test reports were found but none of them are new. Did tests run?” in Jenkins – Stack Overflow

(本頁面已被瀏覽過 643 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料