6

Play ベースのアプリケーションに防弾ナイトリー ビルド環境をセットアップし始めたところです。これまでのところ、このトピックに関する適切なチュートリアルは見つかりませんでした。現在セットアップ中のソリューションを確認していただけますか? ありがとう。

Play フレームワークを Jenkins サーバーにセットアップし、git/svn リポジトリから 24 時間ごとに配布パッケージを作成するジョブを作成します。

play dist

上記のコマンドで app-1.0.zip ファイルが作成されます。ファイルがコピーされ、複数のノードに解凍されます。ロードバランサーを使用しています。最終的に、ファイルは /home/play/webapp/app-1.0 フォルダーに解凍されます。

解凍後、シンボリックリンク /home/play/webapp/app => /home/play/webapp/app-1.0 を変更し、プロジェクトをリロードします。このシンボリックリンクは本当に必要ですか? 古いファイルの上にファイルを解凍することはできますか? プロジェクトを本当に解凍する必要がありますか? jar ファイルを作成してサーバー上で実行することはできますか?

play reload

最後に古いアプリが削除されます。

rm -rf /home/play/webapp/app-0.9

バージョン app-0.9 は、もともと次のスクリプトを実行することによって開始されました。

/etc/init.d/play start

スクリプトは、次のスクリプトを変更したものです。

http://monocaffe.blogspot.fr/2012/09/a-play-framework-server-setup.html

基本的に、スクリプトは app-xxx.zip ファイル内の開始ファイルから見つけた次のコマンドを実行します。

exec java $* -cp "`dirname $0`/lib/*" play.core.server.NettyServer `dirname $0`

また、再生アプリケーションが実行されていることを確認するリロード スクリプトを作成することも考えました。そうでない場合は、再起動ではなく再生アプリケーションが開始されます。

/etc/init.d/play reload

よろしく、マルク

4

2 に答える 2

1

Jenkins a play アプリケーションから継続的にデプロイするためのPython スクリプトを作成しました。基本的に、スクリプトが行うことは次のとおりです。

  • Jenkins をポーリングして、新しいビルドが利用可能かどうかを確認します
  • 利用可能な場合
    • コミットに対応するコードを確認してください
    • コンパイル
    • パッケージを作成します。
    • プレイサーバーを再起動する
  • それ以外の場合は、別の時間をポーリングする前に遅延のためにスリープします

再起動戦略は現時点では基本的なものですが、スクリプトを変更して別の戦略を簡単に実装できます。これ以上のドキュメントはありませんが、コード構成ファイルは読み取り可能でコメント付きです。

于 2012-10-19T14:20:59.467 に答える
1

私はあなたが投稿したブログの男です。その投稿では、すべての Play jar を 1 つの場所 (/home/play/libs/current -> play-2.0.4) に配置することをお勧めします。そのため、 play distを実行する必要はありません。私たちの場合、 play stageを使用し、ファイルを個別に webapps/foo/0.1-SNAPSHOT-20121011/ に scp し、シンボリックリンクをcurrentに変更します。

解凍後、シンボリックリンク /home/play/webapp/app => /home/play/webapp/app-1.0 を変更し、プロジェクトをリロードします。このシンボリックリンクは本当に必要ですか? 古いファイルの上にファイルを解凍することはできますか?

それが、シンボリックリンクを使用したセットアップが好きな方法ですが、それは、特にCIのバージョンである場合、以前のバージョンをある程度保持したいからです。

jar ファイルを作成してサーバー上で実行することはできますか?

技術的には、すべての Play と Netty を含む依存関係を含む実行可能な JAR を作成できますが、それは巨大なファイルになり (Play の依存関係のみが 33MB)、使用されている Play のバージョンを簡単に変更する機能が失われます (これは私が過去 2 か月で 3 回変更されました)。最後に、このオプションはサポートされていないため、Play 以外のものを使用する必要があります (例: http://maven.apache.org/plugins/maven-shade-plugin/examples/ )。実行可能-jar.html )

また、再生アプリケーションが実行されていることを確認するリロード スクリプトを作成することも考えました。そうでない場合は、再起動ではなく再生アプリケーションが開始されます。

これは、ブログ エントリに示されているデプロイスクリプトです。

#!/bin/bash
#
# Script to automate CI deployments. Simply stop all
# servers, change the "current" symlinks to the given
# target folder and finally, start all servers
#

export JAVA_HOME="/usr/lib/jvm/default-java"

play_home="/home/play"
webapps_folder="${play_home}/webapps"

apps=( "foo" "bar" "api" )

for app in ${apps[@]}; do

    echo "Stopping server ${app}"
    ${play_home}/bin/${app} stop

    echo "Regenerate current symlink of ${app}"
    rm ${webapps_folder}/${app}/current
    ln -s ${webapps_folder}/${app}/${1} ${webapps_folder}/${app}/current

    echo "Starting server ${app}"
    ${play_home}/bin/${app} nohup

done

exit 0

このスクリプトのアイデアは、Jenkins の ANT スクリプトから SSH で呼び出すか、./deploy 0.1-SNAPSHOT-20121012 のように手動で呼び出すことです。

于 2012-10-20T17:36:33.453 に答える