1

実装したいユースケースの簡単な説明から始めましょう。

環境

  • Spring Boot でサーバー アプリケーションを開発し、maven を使用してビルドしています。
  • アプリケーションには Redis データベースが必要なので、ビルドが完了し、Redis DB が起動して実行されたら、アプリケーションを開始できます。
  • 私は JavaScript で REST API テストを作成しており、アプリを起動するとテストを実行できます。

実装

  • アプリのビルドには、特別なことは何も必要ありません。私は単に行うことができますmvn clean installmvn packageDocker イメージで使用できる実行可能 jar を作成することもできます。
  • アプリを実行するために、Docker Compose を使用して、アプリケーションと Redis の間の依存関係を表現しています。docker-compose up環境を起動するために使用できます。これは問題ありませんが、非同期のステップです。すべてのサービスがリクエストの受け入れを完全に開始するのにどれくらいの時間がかかるかわかりません
  • アプリケーションの準備ができたら、JavaScript で記述した API テストを起動できます。
  • プロセスの最後にdocker-compose down、テスト環境を解体することができます。

質問

  • 非同期ステップの処理に関するアドバイスを探しています。この単純化された例では、1 つのステップがあります。redis とアプリが完全に起動するまでに時間がかかる (たとえば 5 ~ 15 秒) という事実にどのように対処すればよいでしょうか?
  • このシナリオで使用できる Jenkins Pipeline プラグインの機能はありますか? チュートリアルやドキュメントで多くの情報を見つけることができませんでした。私はwaitUntilステップを見てきましたが、私はいくつかのガイダンスを探しています...
  • アプリの REST エンドポイントの 1 つにループ内で HTTP 要求を発行し、アプリが応答を送信するとすぐに完了する単純なシェル スクリプトを実装する必要がありますか? ステップでこのスクリプトを呼び出す必要がありwaitUntilますか?
  • 私の要件に対するより良いアプローチはありますか?
4

2 に答える 2

0

Jenkinsfileで次のようなことをしました:

stage 'Validation'
  dir("microservice") {
  sh "docker-compose down"
  sh "docker-compose up &"
}

waitUntil {
    def appIsReady = false
    try {
        echo "Checking Spring Boot status page via ${GAMEDOCK_URL}"
        sh "set +e; curl -f -sL -w \"%{http_code}\\n\" ${GAMEDOCK_URL} -o /dev/null; echo \$? > springBootAppStatus; return 0"
        def status = readFile('springBootAppStatus').trim()
        echo 'status: ' + status
        appIsReady = (status == '0')
    } catch (e) {
        echo 'exception: ' + e
        appIsReady = false
    }
    echo 'return appIsReady'
    return appIsReady == true

}

   echo "application is ready"
于 2016-03-14T18:13:17.703 に答える