我面臨一個我無法弄清楚的問題。我想實現的是有一個gradle任務,它產生一個作爲mssql服務器的docker-compose進程,然後使用liquibase啓動所有遷移併爲數據庫創建種子。使用gradle獲得sh的輸出
但問題是碼頭需要一些時間才能啓動服務器,並且liquibase在啓動之前運行。
我做了什麼,開始使用-d標誌在後臺泊塢窗,撰寫,然後用一個循環來ping服務器,直到1433級端口響應,然後讓gradle產出繼續與其他相關任務(實際創建數據庫和種子)。
這裏是我做過什麼:
task checkDbStatusAndGetsItUp(){
group "localEnvironment"
description "Check current local db is up or sets it up"
dependsOn 'cloneEntityProject'
println 'Checking db Status and setting it up'
println '---------------------------'
def stdoutDocker = new ByteArrayOutputStream()
exec{
executable 'sh'
args "-c", """
docker ps | grep microsoft | wc -c
"""
standardOutput = stdoutDocker
}
doLast {
if (stdoutDocker.toString().trim() == '0') {
exec {
executable 'sh'
workingDir 'setup/dp-entidades'
args "-c", """
docker-compose up -d
"""
}
}
def shouldStop = false;
while (shouldStop == false){
def stdoutPing = new ByteArrayOutputStream()
exec{
workingDir 'setup/dp-entidades'
executable 'sh'
args """
nc -zv localhost 1433
"""
ignoreExitValue = true
standardOutput = stdoutPing
}
println stdoutPing.toString();
sleep(1000)
}
}
}
我從上面的代碼得到的是表明該泊塢窗從來沒有得到它的循環。但是,如果我打開另一個終端並手動進行ping操作,它就會起作用,並且數據庫實際上已啓動(我甚至試圖使用telnet,具有相同的結果)
我需要做什麼,實現從gradle ping,如果成功conecting數據庫讓任務繼續?
結果我從上面的代碼中得到的是: SH:0:無法打開NC -zv本地主機1433 SH:0:無法打開NC -zv本地主機1433 SH:0:無法打開NC -zv localhost 1433 sh:0:無法打開nc -zv localhost 1433 sh:0:無法打開nc -zv localhost 1433 –