【问题标题】:Failing a jenkins job詹金斯工作失败
【发布时间】:2013-03-27 10:03:07
【问题描述】:

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

【问题讨论】:

  • 如何“运行”jar 文件?
  • 这是一个可执行的jar。所以我只是在jenkins“配置工作”部分做了java -jar writer.jar
  • jar 是否调用 System.exit?
  • 不,它没有.. 我该怎么做@BevynQ

标签: java jenkins


【解决方案1】:

@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);
}

【讨论】:

    【解决方案2】:

    上次我遇到这个问题时,我决定采取不同的策略并将程序调用更改为 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 拾取

    【讨论】:

    • 就我而言,我可以访问源代码,所以我可以调用该方法并观察返回。如果您真的想破解,我想您可以打开 jar 并尝试从清单文件中找到要调用的内容。抱歉,帮助不大:(
    • 我编写了代码并创建了 JAR。所以我可以访问所有内容.. 那么这里到底需要做什么呢?谢谢
    • 为您添加了一些示例代码。更改了 test() 方法的内容,你应该好好去
    【解决方案3】:

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

    System.exit(1);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      相关资源
      最近更新 更多