2

Webアプリケーション用に(シェルスクリプトで)自動展開スクリプトを設定しました。

java、tomcat、maven、およびpostgresデータベースを使用します。

デプロイメントスクリプトはこれを行います:

  1. ソースリポジトリからデプロイ可能なアプリケーションを構築します
  2. Tomcatを停止します
  3. データベース移行パッチを適用します
  4. 戦争ファイルをTomcatにデプロイします
  5. tomcatを開始します($ TOMCAT_HOME / bin / startup.shを呼び出すことにより)
  6. 成功メッセージで終了します

それはすべて機能していて、かなりきれいです-しかし、それは少し改善する必要があります。ご覧のとおり、成功メッセージが表示されて終了しても、Webアプリケーションが正しく起動しなかったために、デプロイが成功しなかった場合があります。

手順5と6をリファクタリングして、Tomcatサーバーを起動した後、デプロイメントスクリプトがcatalina.outファイルで「tail-f」を実行し、「サーバーが正常に開始されました」というメッセージまたは例外スタックトレースを探すようにします。

その時点までのtail-f出力は、デプロイメントスクリプトの出力の一部である必要があり、ステップ6はそれに応じて「exit0」または「exit1」になります。

シェルスクリプトではなくても、おそらくPythonでそれが可能になるはずです。問題は、私がJavaスペシャリストであるということです。スペシャリストとは、他のすべてを吸うことを意味します:-)

助けてください?:-)

4

3 に答える 3

0

@sniesが提案したように、Pythonのsubprocess.Popenを使用してソリューションを実装することになりました。

外観は次のとおりです。

waitForIt.py

#! /usr/bin/env python
import subprocess
import sys

def main(argv):
    filename = argv[1]
    match=argv[2]
    p = subprocess.Popen(['tail', '-n', '0', '-f', filename], stdout=subprocess.PIPE)
    while True :
        line = p.stdout.readline()
        print line ,
        if match in line :
            break
    p.terminate()

if __name__ == "__main__":
    main(sys.argv)

tailUntil.sh

#!/bin/bash
set -e

filename=$1
match=$2

thisdir=$(dirname $0)
python $thisdir/waitForIt.py "$filename" "$match"

その後

startTomcat.sh

${TOMCAT_HOME}/bin/startup.sh
logDeploy.sh "Agora vamos dar um tail no catalina.out..."
util_tailUntil.sh "$TOMCAT_HOME/logs/catalina.out" 'INFO: Server startup in '

それは私が最初に意図したことをしません (スタックトレースがあってもリターンコード 0 で終了しますが、Python の魔法をもう少し使えば変更できます)、Tomcat の初期化ログはすべて自動化されたログの一部です。 deploy out (そして Jenkins の deploy ジョブで簡単に表示できる) - それで十分です。

于 2012-07-17T14:41:40.330 に答える
0

たぶん、このようなものですか?

tmp=$(mktemp -t catalina.XXXXXXX) || exit 136
trap 'rm "$tmp"' 0
trap 'exit 255' 2 15
tail -n 200 catalina.out >"$tmp"
if grep -q error "$tmp"; then
    cat "$tmp"
    exit 1
fi
exit 0

一方、startup.sh適切にコーディングされていれば、

if startup.sh; then
    tail -f catalina.out
else
    exit $?
fi

に短縮することができます

startup.sh || exit $?
tail -f catalina.out
于 2012-05-25T03:41:28.740 に答える
0

別の方法として、Apache Tomcat Managerアプリケーションを確認することもできます。とりわけ以下をサポートします。

  • リモートおよびローカル パスからのアプリケーションのデプロイ
  • 現在デプロイされているアプリケーションの一覧表示
  • 既存のアプリケーションのリロード
  • 既存のアプリケーションの開始
  • 既存のアプリケーションの停止
  • 既存のアプリケーションのアンデプロイ

マネージャは、 経由で呼び出すことができる Web インターフェイスを提供します。このインターフェイスcurlは、呼び出されたコマンドのステータスを示す単純で解析可能なメッセージを返します。管理機能は、JMX または Ant スクリプトを介して呼び出すこともできます。全体として、非常に便利なツールです。

于 2012-05-25T03:56:15.910 に答える