Вопрос по gradle – Выполнение bash-скрипта в Gradle

12

Я делаю функциональное тестирование с Geb.

Мое приложение развернуто с использованием virgo и использует HSQLDB для хранения данных. Я хотел бы выполнить тесты для этой рабочей версии приложения, но я бы хотел начать с пустой базы данных, каждый раз, когда я запускаю веб-тесты.

Я написал простой скрипт bash

#!/bin/sh
rm -rf $VIRGO_HOME/aresdb*
$VIRGO_HOME/bin/shutdown.sh &
sleep 10
$VIRGO_HOME/bin/startup.sh &

который удаляет базу данных и перезапускает деву.

Тем не менее, когда я добавляю его в мою задачу build.gradle, выполнение команды никогда не заканчивается.

task cleanDB(type: Exec) {
    commandLine './clean.sh' 
}

Почему так? Когда я запускаю этот скрипт в консоли, он быстро возвращается (но virgo все еще пишет в консоль).

Я пытался запустить его в отдельном потоке, но я столкнулся со следующей ошибкой:

task cleanDBThread()<<{
    def cleanDBThread1 = Thread.start {
         cleanDB.execute()
    }
    sleep 10000
    println "wake up!"
}

Exception in thread "Thread-32" java.lang.IllegalStateException:
Cannot start long running operation, as the task artifact state cache
(/home/tomasz/ares/.gradle/1.0-milestone-9/taskArtifacts) has not been locked.

Я также попытался установить "создать-бросить"; в спящем состоянии, но также требует перезапуска Девы. Даже повторное развертывание приложения не помогает.

Что я должен сделать, чтобы запустить веб-тесты с пустой базой данных?

Что произойдет, если вы удалите & amp; символы с конца ваших команд? Я не вижу необходимости выполнять ваши команды в фоновом режиме. Это исправит это? Jared

Ваш Ответ

1   ответ
12

Это странно

Я создал задачу

task callCL(type: Exec) {
    commandLine './cl.sh'
}

который вызывает файл cl.sh

#!/bin/sh
echo "starting "
./acl.sh &
sleep 10
./acl.sh &

этот вызов acl.sh

#!/bin/sh
echo "I am not doing anything"

и это сработало! но одна вещь, когда вы добавляете ./acl.sh амперсанд символ& Вы вызываете задачу из другого потока, который запустил gradle, и, похоже, он зависает. Я бы удалил & amp; от ваших звонков до выключения и запуска, как это

#!/bin/sh
rm -rf $VIRGO_HOME/aresdb*
$VIRGO_HOME/bin/shutdown.sh
$VIRGO_HOME/bin/startup.sh

В любом случае, вы хотите подождать в одной и той же ветке от выключения до запуска, и вам не нужно вызывать sleep тоже!

Похожие вопросы