失败的詹金斯工作
我有一个.jar文件,它会在运行时将数据加载到数据库中。我已经计划通过Jenkins运行这项工作。当我在詹金斯执行这项工作时,它成功运行.JAR。但是,如果作业中存在空指针异常并且未成功完成。即使在那时詹金斯说这个工作已经“通过”了。如果在作业执行期间出现问题,我该如何处理失败的作业?失败的詹金斯工作
@ 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);
}
上次我有这个问题,我决定采取不同的方法,将程序调用改为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做到这一点的? – 2013-03-27 01:33:30
在我的情况下,我可以访问源代码,所以我可以调用方法并观察返回。如果你真的想破解,我想你可以打开jar并尝试从清单文件中找到要调用的内容。对不起,这没有太大的帮助:( – 2013-03-27 01:36:19
我写了代码并创建了JAR,所以我可以访问所有东西..那么究竟需要在这里完成什么?谢谢 – 2013-03-27 01:40:09
如果退出代码不为零,则Jenkins作业失败。
System.exit(1);
应工作(或失败,是:-)更精确
你是如何 “跑” 的jar文件? – 2013-03-27 01:10:07
这是一个可执行的jar。所以我绝对没有java -jar writer.jar在jenkins“配置作业”部分 – 2013-03-27 01:20:36
做的jar调用System.exit? – BevynQ 2013-03-27 01:31:07