Выполнение сценария bash в gradle

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

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

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

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

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

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

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

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

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

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.

Я также попытался установить "create-drop" в конфигурации гибернации, но для этого также требуется перезапуск virgo. Даже повторное развертывание приложения не помогает.

что мне делать, чтобы запускать webtests с пустой базой данных?

1 ответов


странно

Я создал задание

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, и похоже, что он висит. Я бы удалил & из ваших звонков в shutdown и начал, как это

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

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