Java 詹金斯的工作失败了

Java 詹金斯的工作失败了,java,jenkins,Java,Jenkins,我有一个.Jar文件,它在运行时将数据加载到数据库中。我已计划通过Jenkins运行此作业。当我在Jenkins中执行作业时,它成功地运行了.JAR。但是,请说明作业中是否存在空指针异常,并且作业未成功完成。即便如此,詹金斯说,这项工作已经“通过”。如果在作业执行过程中出现问题,如何使作业失败?上次我遇到这个问题时,我决定采取不同的策略,并将程序调用更改为junit测试。詹金斯当时很高兴 Steps I took: 1. create an empty (maven) project 2. ad

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

上次我遇到这个问题时,我决定采取不同的策略,并将程序调用更改为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上次遇到这个问题时,我决定采取不同的策略,将程序调用更改为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的解决方案很好。如果你不想在Jenkins中编写JUnit测试并支持它,你可以做他前面提到的事情:捕捉空指针异常(实际上,只是在你的应用程序中有一个顶级捕捉),然后调用API以退出并返回代码:

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

@科里的解决方案很好。如果你不想在Jenkins中编写JUnit测试并支持它,你可以做他前面提到的事情:捕捉空指针异常(实际上,只是在你的应用程序中有一个顶级捕捉),然后调用API以退出并返回代码:

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

如果退出代码不是零,Jenkins jobs将失败

System.exit(1);

如果退出代码不是零,Jenkins jobs将失败

System.exit(1);

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

如何“运行”jar文件?它是一个可执行的jar。所以我在jenkins的“配置作业”部分做了java-jarwriter.jar,jar调用System.exit了吗?不,没有。。我怎么做@bevynq你怎么“运行”jar文件?它是一个可执行的jar。所以我在jenkins的“配置作业”部分做了java-jarwriter.jar,jar调用System.exit了吗?不,没有。。在我的案例中,@BevynQIn我是如何做到的?我可以访问源代码,这样我就可以调用该方法并观察返回。如果你真的想破解,我想你可以打开jar,试着从清单文件中找到要调用的内容。抱歉,这没有多大帮助:(我编写了代码并创建了JAR。因此我可以访问所有内容..那么这里到底需要做什么呢?谢谢为您添加一些示例代码。更改了测试()的内容)方法,您应该很乐意在我的情况下,我可以访问源代码,因此我可以调用该方法并观察返回结果。如果您真的想进行黑客攻击,我想您可以打开jar并尝试从清单文件中查找要调用的内容。抱歉,这没有多大帮助:(我编写了代码并创建了JAR。因此我可以访问所有内容。那么这里到底需要做什么呢?感谢为您添加一些示例代码。更改了test()方法的内容,您应该可以开始了