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