2013-03-27 131 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); 

应工作(或失败,是:-)更精确