如何使用Jenkins在测试服务器上运行Spring Boot应用程序

时间:2018-09-29 18:19:46

标签: spring-boot jenkins

我正在尝试从Gradle生成的jar中使用嵌入式Tomcat服务器运行Spring Boot应用程序。

我想说的没什么,但是以某种方式我无法使它按我想要的方式工作。

这里有一些问题。目的是在测试服务器上运行Spring Boot应用程序,以便我们可以对其进行一些集成测试。我们创建了一些Postman测试,将在Spring Boot应用程序启动后在Jenkins上运行。

简单,简单地运行jar工件

我的猜测是,最简单的方法是将jar部署到服务器并使用java -jar my-app.1.0.0-SNAPSHOT.jar运行它。当我在本地主机上运行此命令并转到 http://localhost:8100 时,我可以看到该网站。但是,当我在服务器上执行相同的操作时,网站不会显示。

使用脚本运行jar

要自动启动和停止Spring Boot应用程序,我认为脚本会很不错。

我创建了一个脚本,该脚本应该关闭所有正在运行的进程,然后启动一个新进程。将新的工件部署到测试服务器后,将调用此脚本。

#!/bin/sh
ps | grep my-app | awk '{print $1}' | xargs kill -9 || true
/usr/bin/java -jar my-app.1.0.0-SNAPSHOT.jar &

运行此脚本会发生以下情况:

首先显示一条消息,指示未正确使用ps命令:

$ ./start-app

Usage:
 kill [options] <pid> [...]

...

然后,我希望Spring Boot应用程序启动,但是首先我看到另一个提示,然后Spring Boot应用程序启动。

$
 .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.5.RELEASE)
...
2018-09-29 18:11:45.142 ERROR 29971 --- [           main] o.apache.catalina.core.StandardService   : Failed to start connector [Connector[HTTP/1.1-8100]]
...

哪个说另一个实例正在运行,可以通过调用ps进行验证。而且直到按 enter 键,我也没有收到其他提示。

问题是:如何使Spring Boot应用程序自行运行并在可用时启动新实例?

1 个答案:

答案 0 :(得分:1)

您的问题似乎是该应用程序没有被杀死。

如果该服务器仅用于测试您的应用程序,则可以通过运行以下命令更轻松地杀死所有Java进程:

pkill -f "java"

请注意,执行上述操作将杀死所有Java进程。如果您只运行一个Java应用程序,这不是问题。

这是一个可能满足您需求的脚本:

output=`lsof -i :8100`

if [ ${#output} != 0 ]; then
    echo "Port 8100 is already running, killing all java processes"
    pkill -f "java"
else
    echo "Port 8100 is NOT running"
fi

echo "Starting application"
java -jar yourjarfilenamehere.jar &

这是什么:

  1. 检查端口8100是否正在使用(您的应用程序使用的端口)
    • 如果正在使用,它将杀死所有Java进程
    • 如果不使用它,则不执行任何操作
  2. 运行您的jar文件