0

我有一个 .Jar 文件,它只会在运行时将数据加载到数据库中。我已计划通过 Jenkins 运行这项工作。当我在 Jenkins 中执行作业时,它会成功运行 .JAR。但是,如果作业中存在空指针异常并且它没有成功完成。即便如此,詹金斯说这项工作已经“通过”。如果在作业执行过程中出现问题,我如何使作业失败?

4

3 回答 3

2

@Corey 的解决方案很好。如果你不想写一个 JUnit 测试并在 Jenkins 中支持它,你可以做他之前提到的:捕捉空指针异常(真的,只需要在你的应用程序中有一个顶级捕捉),并且调用 API 退出并返回代码:

try {
    myCode.call();
catch (Exception e) {
    System.out.println("An exception was caught at the top level:" + e);
    System.exit(-1);
}
于 2013-03-27T01:51:05.867 回答
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 拾取的

于 2013-03-27T01:29:59.477 回答
1

如果退出代码不为零,则 Jenkins 作业将失败。

System.exit(1);

应该工作(或失败,更准确地说:-)

于 2013-03-27T01:51:26.990 回答