当 JUnit 测试失败时,Mark Gradle 在 Jenkins 中构建不稳定

Posted

技术标签:

【中文标题】当 JUnit 测试失败时,Mark Gradle 在 Jenkins 中构建不稳定【英文标题】:Mark Gradle build unstable in Jenkins when JUnit tests fail 【发布时间】:2012-01-10 17:55:50 【问题描述】:

我在 Jenkins 中有一个 Gradle 构建,其中包含作为构建的一部分执行的各种 JUnit 测试。现在,当一些测试失败时,完整的构建被标记为失败 - 因为 Gradle 说构建失败。

如何说服 Gradle 成功构建,然后让 Jenkins 将构建标记为不稳定?对于 ant,这完全没有问题。

【问题讨论】:

【参考方案1】:

使用ignoreFailures property in the test task.

apply plugin: 'java'
test 
     ignoreFailures = true

【讨论】:

是否可以仅从命令行为 jenkins 配置此功能?因为使用此选项 FAILED build 被记录为 SUCCESS 良好的构建成功 - 但詹金斯将构建显示为“成功”而不是“不稳定”:-/。有人对此有很好的解决方案吗?詹金斯的一些插件?什么的 好吧 - 解决方案是使用这个。这个答案中的一些东西***.com/questions/8148122/…我使用了“Text-finder”插件【参考方案2】:

你可以使用外部属性来解决这个问题。

if (!ext.has('ignoreTestFailures')) 
  ext.ignoreTestFailures = false


test 
  ignoreFailures = project.ext.ignoreTestFailures

在此设置中,默认情况下失败将使构建失败。但是如果你像这样调用 Gradle:gradle -PignoreTestFailures=true test 那么测试失败不会导致构建失败。因此,您可以将 Jenkins 配置为忽略测试失败,但在开发人员手动运行测试时使构建失败。

【讨论】:

【参考方案3】:

您可以将其包含在您的主 bu​​ild.gradle 中,以应用于所有项目和所有测试任务。

allprojects
    tasks.withType(Test) 
        ignoreFailures=true;
    

【讨论】:

【参考方案4】:

由于在我的情况下无法使用失败的测试,因此我发现了以下内容。 如果您使用的是脚本化的 jenkinsfile。可以将测试阶段包装在 try-catch 语句中。

try 
 stage('test') 
  sh './gradlew test'
  
 catch (e) 
  echo "Test FAILED"

这将捕获 gradle 抛出的构建异常,但它会将构建标记为不稳定。

【讨论】:

以上是关于当 JUnit 测试失败时,Mark Gradle 在 Jenkins 中构建不稳定的主要内容,如果未能解决你的问题,请参考以下文章

如何在Gradle中使用JUnit 5?

Jenkins构建失败,因为它正在查找执行junit测试时在logback.xml中定义的日志路径

当@before节中的代码失败时Junit将执行@Test案例吗?

当所有测试都是最新的时如何运行 Gradle 测试?

如何使用 Gradle 和 JUnit 5 仅运行特定测试?

选择要运行的配置类型时,在 IntelliJ IDEA 15 中运行 Gradle 测试而不是 Junit 测试