【问题标题】:How to run Spring Boot application on test server using Jenkins如何使用 Jenkins 在测试服务器上运行 Spring Boot 应用程序
【发布时间】:2019-03-05 09:23:03
【问题描述】:

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

我想说没什么太花哨的,但不知怎的,我无法让它按照我想要的方式工作。

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

简单明了地运行 jar 工件

我的猜测是,最简单的方法是将 jar 部署到服务器并使用 java -jar my-app.1.0.0-SNAPSHOT.jar 运行它。当我在 localhost 上运行此命令并转到 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 应用程序自行运行并在可用时启动新实例?

【问题讨论】:

    标签: spring-boot jenkins


    【解决方案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 文件

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 2021-08-20
      • 2017-07-17
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多