我使用Gradle触发将我的Web应用程序部署到开发环境。 部署是异步完成的 - 部署任务立即返回,但新应用程序启动需要一些时间。
我想在我的Gradle脚本中等待,直到新版本的应用程序正常运行。
我使用Spring Boot 1.3.5
并且我有标准的监控端点
/info
和/health
http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
/info
返回
{
"app" : {
"name" : "app name",
"branch" : "origin/develop",
"id" : "153",
"tag" : "build info",
"version" : "1.0-SNAPSHOT"
}
}
我有兴趣等到/info' returns specific
id` - 新版本的ID,而不是可能正在运行的旧版本。
答案 0 :(得分:1)
由于Gradle允许您在脚本中使用Groovy,因此在执行任务的主要作业之后,您可以自由地使构建等待某些条件。您所需要的只是提供一个doLast
闭包,您必须在一定的睡眠时间内检查循环中的健康状态响应。
看起来像是:
//assume, this is your deploy task
task deploy {
doLast {
def id = %make a http-request and parse response for id%
while(id!=%specificid%) {
//sleep for 5 seconds
sleep(5*1000)
//one more http-request and parsing
id = %make a http-request and parse response for id%
}
}
}
在任务作业完成后执行 doLast
,并且在它运行之前不会让下一个任务执行。
您可以添加所需的任何条件,例如,以防止无限循环或其他。当然,这不是一个现成的解决方案,但您可以使用它来构建自己的解决方案。您只需要进行http请求和解析响应(httpbuilder lib可以帮助您)。
我使用了几乎相同的逻辑来检查远程服务是否启动并运行,但是使用ssh-session而不是http-requests,它运行正常。