2010-12-02 50 views
0

我在哈德森建立了一個'自由式項目',它從svn倉庫中檢查我的源代碼。然後我添加了一個'shell step'來構建代碼:在哈德遜設置一個測試編譯作業,檢測何時編譯失敗

echo "# $JOB_NAME: $BUILD_ID" >log 
cd to/my/path/ 
qmake &>>$WORKSPACE/log 
make &>>$WORKSPACE/log 

運行測試後,hudson說t成功了。當我看到構建的控制檯輸出時,我發現:

In file included from src/tut.h:47, 
       from src/tut3module.cpp:1: 
src/log.h:69: error: ‘uint8_t’ has not been declared 
make: *** [obj/tut3module.o] Fehler 1 
Finished: SUCCESS 

爲什麼哈德森不會識別這個錯誤?我該如何配置工作?

讓我知道你是否需要更多關於我的配置的信息!

感謝您的幫助!

回答

3

Hudson使用構建步驟的錯誤代碼來確定構建步驟是成功還是失敗。您的整個構建步驟將轉換爲一個腳本。如果您不在腳本中的某處呼叫退出,則腳本的退出代碼last將成爲腳本的退出代碼。

見下面的腳本

copy readme.txt dd: 
type readme.txt 

讓我們假設的readme.txt存在。該副本將失敗,錯誤代碼爲1,因爲dd:是未知設備。 type命令將會成功,因此構建步驟本身將返回成功。所以要麼分開構建命令,要麼在每個命令後檢查錯誤代碼。系統管理員向我推薦了第三種方法:運行腳本並檢查結果。所以在你的情況下,只要你的構建工件存在,你的構建就應該工作。

當然,您也可以使用sagar提到的日誌解析器插件。但是如果你可以避免這種情況,那麼請使用腳本來檢查錯誤代碼,然後依賴日誌解析器。順便說一句,有些命令偏離標準並返回一個非零的錯誤代碼,即使在成功的情況下也是如此。

0

嘗試在哈德遜中創建兩個獨立的構建步驟。讓第一步成爲編譯。第二步執行這些步驟。如果其中任何一個步驟失敗,哈德森應該失敗。

1

哈德森是不承認錯誤可能是因爲,在你的構建步驟中,您重定向兩個輸出和錯誤的QMAKE並作出日誌:

qmake &>>$WORKSPACE/log 
make &>>$WORKSPACE/log 

嘗試取出重定向,看看是否有變化的東西。所以:

echo "# $JOB_NAME: $BUILD_ID" >log 
cd to/my/path/ 
qmake 
make 

在任何情況下,你有第二個選擇:

您可以使用此: http://wiki.hudson-ci.org/display/HUDSON/Log+Parser+Plugin

你可以設置它承認像「錯誤」與「失敗」的話並導致它失敗的構建。 它使用正則表達式來檢測單詞,所以你有很多控制它用來檢測失敗的東西。

+2

一般來說,哈德森不依賴於輸出。所以你可以儘可能多地重定向他們。 Hudson只依賴執行腳本的返回碼。構建異常是爲了支持某些構建步驟/工具。這些包括maven和螞蟻。額外的插件,增加對像qmakebuilder插件(http://wiki.hudson-ci.org/display/HUDSON/qmakebuilder+Plugin)等工具的支持。 – 2010-12-03 01:03:39