gradle - 如何拦截Gradle任务的失败?

标签 gradle jmeter gradle-plugin

'我正在使用net.foragerr.jmeter插件1.0.2-2.13版编写构建脚本。

我的任务主要是1)运行插件JMeter任务,2)收集应用程序日志。

task perfTest(dependsOn: ['jmClean', 'jmRun'],
  description:'Runs (cleanly) performance tests on a deployed application and collects the app log if available. ' +
  'Use --no-daemon to see progress. Use --info to see all JMeter command-line arguments.') << {

    if (logDir.isDirectory()) {
        copy {
            from "${logDir}"
            into "${buildDir}/jmeter-report"
            include 'iRePORT.log'
        }
    }
}

现在,即使jmRun失败,我也需要收集日志。当我尝试为此实现解决方案时,我真的很困惑:
  • 我无法修改jmRun任务,因为它是一个插件任务
  • 我无法使用try/finally并直接执行其他任务,因为Gradle设计为不支持此操作,例如参见How do I wrap a gradle task in another task?
  • 我无法使用--continue标志gradle.startParameter.continueOnFailure = true,因为它不会继续执行依赖任务

  • 我想到的唯一可能的解决方法是分离日志收集,始终将其包含在命令行中,例如perfTest collectLogs并在gradle.startParameter.continueOnFailure = true中设置perfTest

    这远非理想。

    有更好的解决方案吗? Gradle是否应该有一种方法来支持这样的方案?

    最佳答案

    您可以尝试创建这样的任务

    task collectPerfTestLogs(type: Copy) {
       from "${logDir}"
       into "${buildDir}/jmeter-report"
       include 'iRePORT.log'
    }
    

    然后有perfTest.finalizedBy(collectPerfTestLogs)

    引用Gradle:

    Finalizer tasks will be executed even if the finalized task fails.



    参见https://docs.gradle.org/current/userguide/more_about_tasks.html

    关于gradle - 如何拦截Gradle任务的失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34095853/

    相关文章:

    android - 非法状态异常 :buildToolsVersion is not specified

    java - Gradle android找不到符号上下文

    jmeter - 线程和迭代次数如何影响测试以及JMeter的最高 yield 是多少?线程限制

    jmeter - Jmeter中的根CA证书

    spring-boot - Gradle > 如何停止使用 gradle bootRun 启动的 Spring Boot 应用程序?

    gradle - Gradle-使用命令行参数创建自定义任务

    android-studio - Android Studio无法使用Gradle发行版 'https://services.gradle.org/distributions/gradle-4.4-all.zip'执行构建

    android - 无法从android studio上的github导入项目

    java - Gradle 不适用于 Spring Boot 示例应用程序。为什么不?

    java - JMeterThread 完成后如何运行代码?