如何拦截Gradle任务的失败?

时间:2015-12-04 19:17:31

标签: 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失败,我也需要收集日志。当我尝试为此实现解决方案时,我真的被卡住了:

  1. 我无法修改jmRun任务,因为它是一个插件任务
  2. 我无法使用try/finally并直接执行其他任务,因为Gradle的设计不支持此功能,例如:见How do I wrap a gradle task in another task?
  3. 我无法使用--continue标记gradle.startParameter.continueOnFailure = true,因为它不会继续执行从属任务
  4. 我能想到的唯一可能的解决方法是分离日志集合,始终将其包含在命令行中,例如: perfTest collectLogs并在gradle.startParameter.continueOnFailure = true中设置perfTest

    这远非理想。

    有没有更好的解决方案?难道Gradle无法支持这样的方案吗?

1 个答案:

答案 0 :(得分:1)

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

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

然后有perfTest.finalizedBy(collectPerfTestLogs)

引用Gradle:

  

即使最终任务失败,也会执行终结器任务。

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