組み込みアプリケーション サーバーとして Jetty を使用する webapp があります。また、次のコマンドを使用して実行するとサーバーを起動する Main クラスもセットアップしました。
java -jar foo.war
この部分では、すべてが期待どおりに機能しています。私が現在抱えている問題は、これをジェンキンスと統合することです。
バッチ コマンドとして実行するjava -jar foo.war
と、サーバーは起動しますが、ビルドは終了しません。サーバー コンソールが表示され続けるだけです (結局のところ、すべてが同じプロセスの一部であるため、意味があります)。新しいプロセスを生成することになっていると思いますが、サーバーの起動後に新しいプロセスを生成してメインプロセスに「通知」するにはどうすればよいですか?
アプリケーションサーバーが起動された後にのみ、受け入れテスト (別名セレンテスト) を実行する必要があります。
Jenkins は (残念ながら) Windows Server で実行されています。それが関連しているかどうかはわかりませんが、以下はアプリケーションサーバーを起動するために使用するコードです(少し簡略化されています):
public static void main(String[] args) throws Exception {
Server server = new Server(8082);
server.setHandler(getHandlers(server));
server.setStopAtShutdown(true);
server.start();
server.join();
}
private static HandlerList getHandlers(Server server) {
ProtectionDomain protectionDomain = WebServer.class.getProtectionDomain();
URL location = protectionDomain.getCodeSource().getLocation();
WebAppContext webapp = new WebAppContext(location.toExternalForm(), "/");
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] {
webapp
});
return handlers;
}