2015-12-04 2 views
1

«Я пишу скрипт сборки, используя плагин net.foragerr.jmeter, версия 1.0.2-2.13.Как перехватить неудачи задачи Gradle?

В чем заключается моя задача: 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, потому что он не будет продолжать выполнение зависимой задачи

Единственный возможный обходной путь, что я мог думать о том, чтобы отделить журнал коллекции, всегда включайте его по команде линии, например perfTest collectLogs и установить gradle.startParameter.continueOnFailure = true в perfTest.

Это далеко не идеальный вариант.

Есть ли лучшие решения? Разве не должно быть способа, чтобы Gradle поддерживал такие сценарии?

ответ

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

+0

Это именно то, что мне было нужно. Благодаря! Я не знал о finalizedBy(). – DKroot

Смежные вопросы