0
点赞
收藏
分享

微信扫一扫

【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署


1.项目代码准备

  1. 先得有一个git仓库,里面是一个基于maven的spring boot项目,用IDE打开能直接运行成功的那种,不必多说。
  2. centos7 64 bit,自带java1.8环境。(我的是deepin系统)
  3. 查看开发机器中安装maven环境(为了尽力在服务器中安装同样版本的maven)。
    查看IDEA 的maven版本。
  4. 【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署_jenkins多module

  5. 安装jenkins并启动,保证可用,略,上一篇文章就是。
  6. 安装jenkins中必要的插件,​​maven-intergration​​​,​​publish-over-ssh​​。
  7. 配置插件。

2. jenkins环境准备

首先,jenkins有“全局工具”,可以让jenkins安装(网速?),也可以自己安装,然后再jenkins里指定即可。
如JDK、maven、nodejs、git等。
具体的安装方法就不在这里赘述了。

maven-intergration的配置
maven的问题,在之前安装一个maven工具可用也可,在jenkins中配置专门安装一个maven也可(我用的就是这个办法,但很慢,等了至少10min)。
略过。

Publish over SSH的配置

【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署_maven+jenkins_02


配置

注意如果不想使用ssh的publickkey这样的方式连接,也可以用username和password连接。
点“高级”即可,然后test connection可看效果。

  1. 多模块module项目的构建
    如果是单模块的项目构建很简单找到对应的target文件夹里生成的jar文件运行即可。
    但多模块的项目怎么做呢?
    我的这个试验项目的结构如下图:
  2. 【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署_jenkins多模块_03

  3. 在箭头所指的这个pom文件(​​@SpringBootApplication​​所在的这个module的pom.xml文件)里添加如下内容:

    </dependencies>

<build>
<finalName>testcode</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.1.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

</project>

最终项目build完成之后,会在starter项目的target文件夹中生成一个 testcode.jar 文件,直接用命令行运行这个jar即可,已亲测。

java -jar testcode.jar

如此即可看到springboot项目的成功启动,并可正常访问。(当然前提是你的java命令可用,防火墙端口等已允许通过)

但实际上我们每次build的时候还是应该把原来的进程kil掉,再重新build生成。
因此我们并不会每次用手工,要用命令来完成。

3.发布尝试

  1. 相关命令和脚本

经查找生成的包的路径​​var/lib/jenkins/jobs/flag2020-maven-springboot/workspace/starter/target​

启动命令:

java -jar testcode.jar

可看到项目启动成功。

【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署_maven_04

尝试一下kill进程

ps -ef | grep testcode.jar | grep -v grep | awk '{print $2}' | xargs kill -9

【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署_jar_05


可见kill成功。

我专门打开一个浏览器页面访问这个springboot项目的swagger页面。
几次尝试后,发现每当我启动项目时,页面有内容。
每当我kill之后,页面就不可访问。
可见这两个命令确实实现了作用。

  1. 讲上述kill进程等内容写入脚本。
    学习了网上找到的其他资料,改写了脚本如下:

注意这个脚本不是最终版,后面有改良,放在之类只是为了展示思路

#!/bin/bash
#判断进程是否存在,如果不存在就启动它如果存在就重启它
PIDS=`ps -ef |grep testcode.jar |grep -v grep | awk '{print $2}'`
if [ "$PIDS" != "" ]; then
kill -9 $PIDS
fi

#ps -ef | grep testcode.jar | grep -v grep | awk '{print $2}' | xargs kill -9
cd /var/lib/jenkins/jobs/my-project/workspace/starter/target
java -jar testcode.jar

【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署_jenkins多模块_06

然后执行,顺利成功!

【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署_jar_07

  1. 但由于脚本原因,启动了springboot,脚本并不结束和返回,jenkins就一直处于“build进行中”的状态,如下图。
    如何处理呢?
  2. 【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署_jenkins多module_08

  3. 这里要提到​​nohup命令​​,资料很多,随便搜一下就行了。
    这里放上我之前的记录。
    linux nohup
  4. jenkins 构建完成后又不可访问了,怎么回事?
    经查,是jenkins build完成后又kill掉了相关进程,现在设法不让它kill就好了。

于是把脚本改造了一下,放在了两个地方。

【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署_maven+jenkins_09


【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署_maven_10


然后终于成功了。

【综合学习】centos7 + maven + jenkins + springboot 多模块module项目部署_maven_11

终于算是完成了预想的结果,大致在这里记录一下。


举报

相关推荐

0 条评论