如何使用Jenkins部署SpringBoot Maven应用程序



我有一个Spring Boot应用程序,它运行在嵌入式Tomcat servlet容器mvn spring-boot:run上。我不想将该项目作为独立的战争部署到独立的Tomcat。

每当我将代码推送到BitBucket/Github时,就会运行一个钩子并触发Jenkins作业(在AmazonEC2上运行)来部署应用程序。

Jenkins作业有一个构建后操作:mvn spring-boot:run,问题是当构建后操作完成时,作业挂起。

应该有另一种方法来做到这一点。如有任何帮助,我们将不胜感激。

问题是Jenkins不能很好地处理构建的派生子进程。@Steve在评论中建议的解决方法(nohuping)并没有改变我的行为,但一个简单的解决方法是使用atunix命令安排应用程序的启动:

> echo "mvn spring-boot:run" | at now + 1 minutes

这样,詹金斯成功地完成了这项工作,没有超时。


如果您最终通过java -jar app.jar.jar文件运行应用程序,请注意,如果.jar文件被覆盖,则Boot会中断,您需要确保在复制工件之前停止应用程序。如果您使用ApplicationPidListener,您可以通过添加以下命令的执行来验证应用程序是否正在运行(如果正在运行,则停止它):

> test -f application.pid && xargs kill < application.pid || echo 'App was not running, nothing to stop'

我发现首先将工件复制到服务器上的指定区域非常有用,以跟踪部署的工件,而不是从jenkins作业文件夹启动应用程序。然后在那里创建一个服务器日志文件,并开始在jenkins窗口上侦听它,直到服务器启动。

为了做到这一点,我开发了一个小外壳脚本,你可以在这里找到

您还会发现一篇小文章,解释如何在jenkins上配置项目。

如果对你有用,请告诉我。Thnaks

nohupat now + 1 minutes对我不起作用。由于Jenkins正在杀死后台旋转的进程,我通过为Jenkins任务设置一个假BUILD_ID来确保进程不会被杀死。这就是Jenkins Execute shell任务的样子:

BUILD_ID=do_not_kill_me
java -jar -Dserver.port=8053 /root/Deployments/my_application.war &
exit

正如这里所讨论的。

我假设服务器上有一个Jenkins用户,这个用户是Jenkins服务的所有者:

  1. 以root用户身份登录服务器
  2. 运行sudo visudo
  3. 在末尾添加"jenkinsALL=(ALL)NOPASSWD:ALL"(jenkins=您的jenkins用户)
  4. 登录Jenkins并选择您的工作,然后单击进行配置
  5. 在"后期构建步骤"中选择"执行Shell"
  6. 复制并粘贴此:
   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

保存并运行您的作业,服务应自动启动。

这对我在linux机器上的jenkins上起到了作用

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

最新更新