埋め込みTomcatサーブレットコンテナで実行されるSpring Bootアプリケーションがありますmvn spring-boot:run
。また、プロジェクトを独立したTomcatとして独立した戦争として展開したくありません。
コードをBitBucket/Githubにプッシュするたびに、フックが実行され、Jenkinsジョブ(Amazon EC2で実行)がトリガーされてアプリケーションがデプロイされます。
Jenkinsジョブにはビルド後のアクションがあります:mvn spring-boot:run
、問題は、ビルド後のアクションが終了するとジョブがハングすることです。
これを行う別の方法があるはずです。任意の助けをいただければ幸いです。
問題は、Jenkins ビルドからの子プロセスの生成をうまく処理しない です。 @Steveがコメント(Nohup
ing)で提案した回避策は私の場合の動作を変更しませんでしたが、簡単な回避策はscheduleat
unixコマンドを使用したアプリの起動:
> echo "mvn spring-boot:run" | at now + 1 minutes
このようにして、ジェンキンスはタイムアウトすることなくジョブを正常に完了します。
.jar
経由でJava -jar app.jar
ファイルからアプリケーションを実行することになった場合、 。jarファイルが上書きされるとブートが中断する に注意し、アプリケーションを確認する必要があります。アーティファクトをコピーする前に停止します。 ApplicationPidListener
を使用している場合、次のコマンドの実行を追加することにより、アプリケーションが実行されていることを確認できます(実行されている場合は停止します)。
> test -f application.pid && xargs kill < application.pid || echo 'App was not running, nothing to stop'
展開されたアーティファクトを追跡し、jenkinsジョブフォルダーからアプリを起動しないために、最初にサーバー上の指定された領域にアーティファクトをコピーすると非常に便利です。次に、サーバーログファイルを作成して、サーバーが起動するまでjenkinsウィンドウでそのファイルのリッスンを開始します。
それを行うために、私はあなたが見つけることができる小さなシェルスクリプトを開発しました here
Jenkinsでプロジェクトを構成する方法を説明する小さな記事もあります。
あなたのために働いたかどうか私に知らせてください。スナクス
サーバーにJenkins-userがあり、このユーザーがJenkins-serviceの所有者であると仮定します。
Sudo visudo
service=myapp
if ps ax | grep -v grep | grep -v $0 | grep $service > /dev/null
then
Sudo service myapp stop
Sudo unlink /etc/init.d/myapp
Sudo chmod +x /path/to/your/myapp.jar
Sudo ln -s /path/to/your/myapp.jar /etc/init.d/myapp
Sudo service myapp start
else
Sudo chmod +x /path/to/your/myapp.jar
Sudo ln -s /path/to/your/myapp.jar /etc/init.d/myapp
Sudo service myapp start
fi
ジョブを保存して実行すると、サービスが自動的に開始されます。
Nohup
とat now + 1 minutes
がうまくいきませんでした。 Jenkinsはバックグラウンドでスピンされたプロセスを強制終了したため、そのJenkinsタスクに偽のBUILD_IDを設定することで、プロセスが強制終了されないようにしました。これは、Jenkins実行シェルタスクのようです。
BUILD_ID=do_not_kill_me
Java -jar -Dserver.port=8053 /root/Deployments/my_application.war &
exit
前述のとおり、 ここ 。
これはLinuxマシンのジェンキンスで私のために働いた
kill -9 $(lsof -t -i:8080) || echo "Process was not running."
mvn clean compile
echo "mvn spring-boot:run" | at now + 1 minutes
8080にプロセスがない場合は、メッセージを出力して続行します。
at
がLinuxマシンにインストールされていることを確認してください。使用できます
Sudo apt-get install at
at
をインストールする