2016-05-25 5 views
1

私はGradleを使ってWebアプリケーションの開発環境への展開を引き起こします。 デプロイメントは非同期で実行されます。デプロイメントタスクは一度に戻りますが、新しいアプリケーションが起動するまでには時間がかかります。Gradleでウェブアプリケーションが起動するまでの待ち時間は?

新しいバージョンのアプリケーションが正常に動作し、正常に動作するまで、私はGradleスクリプトで待っています。

私は春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

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-requestとparse response(httpbuilder libがそれを手助けするかもしれない)を作ることだけです。

リモートサービスの起動と実行の有無を確認するのに一度はほとんど同じロジックを使いましたが、http-要求ではなくssh-sessionで正常に動作していました。

関連する問題