如何使用Gradle等待Web应用程序启动?

时间:2016-05-25 15:42:31

标签: web-applications gradle spring-boot

我使用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,而不是可能正在运行的旧版本。

1 个答案:

答案 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,它运行正常。