2013-03-27 218 views
0

我有一個.jar文件,它會在運行時將數據加載到數據庫中。我已經計劃通過Jenkins運行這項工作。當我在詹金斯執行這項工作時,它成功運行.JAR。但是,如果作業中存在空指針異常並且未成功完成。即使在那時詹金斯說這個工作已經「通過」了。如果在作業執行期間出現問題,我該如何處理失敗的作業?失敗的詹金斯工作

+1

你是如何 「跑」 的jar文件? – 2013-03-27 01:10:07

+0

這是一個可執行的jar。所以我絕對沒有java -jar writer.jar在jenkins「配置作業」部分 – 2013-03-27 01:20:36

+0

做的jar調用System.exit? – BevynQ 2013-03-27 01:31:07

回答

2

@ Corey的解決方案是好的。如果你不想寫一個JUnit測試並在Jenkins中支持它,你可以按照他之前提到的那樣做:捕獲空指針異常(實際上,只是在你的應用中有一個頂級的catch),並且請致電API以退出代碼退出:

try { 
    myCode.call(); 
catch (Exception e) { 
    System.out.println("An exception was caught at the top level:" + e); 
    System.exit(-1); 
} 
1

上次我有這個問題,我決定採取不同的方法,將程序調用改爲junit測試。詹金斯當時很開心。

Steps I took: 
1. create an empty (maven) project 
2. added a single java class SmokeTest.java 
3. Added test that called the method I was testing via a script 
4. Create a (maven) Jenkins job to run the project 

我的測試內容:

public class SmokeTest 
{ 
    private static final String OK = "OK"; //$NON-NLS-1$ 

    @Test 
    public void test() 
    { 
     // Create a new instance of the Firefox driver 
     final WebDriver driver = new HtmlUnitDriver(); 

     final String url = PropertyManager.getInstance().getString(PropertyManager.SMOKE_TEST_URL_BASE) + "smoke/smoketest"; //$NON-NLS-1$ 
     AuditLog.registerEvent("Smoke test url is: " + url, this.getClass(), AuditLog.INFO); //$NON-NLS-1$ 
     driver.get(url); 

     // Find the text element by its id 
     final WebElement databaseElement = driver.findElement(By.id("database")); //$NON-NLS-1$ 

     final String databaseResult = databaseElement.getText(); 
     Assert.assertEquals(SmokeTest.OK, databaseResult); 

     //Close the browser 
     driver.quit(); 
    } 
} 

這裏最重要的部分是 「Assert.assertEquals」 行。這個結果是由jUnit拾取,因此jenkins

+0

你是如何通過Junit做到這一點的? – 2013-03-27 01:33:30

+0

在我的情況下,我可以訪問源代碼,所以我可以調用方法並觀察返回。如果你真的想破解,我想你可以打開jar並嘗試從清單文件中找到要調用的內容。對不起,這沒有太大的幫助:( – 2013-03-27 01:36:19

+0

我寫了代碼並創建了JAR,所以我可以訪問所有東西..那麼究竟需要在這裏完成什麼?謝謝 – 2013-03-27 01:40:09

1

如果退出代碼不爲零,則Jenkins作業失敗。

System.exit(1); 

應工作(或失敗,是:-)更精確