如何拦截 Gradle 任务的失败?
How do I intercept failures of a Gradle task?
'我正在使用 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
并在 perfTest
.
中设置 gradle.startParameter.continueOnFailure = true
这远非理想。
有没有更好的解决办法? 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
'我正在使用 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
并在 perfTest
.
gradle.startParameter.continueOnFailure = true
这远非理想。
有没有更好的解决办法? 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