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

  1. 先得有一个git仓库,里面是一个基于maven的spring boot项目,用IDE打开能直接运行成功的那种,不必多说。
  2. centos7 64 bit,自带java1.8环境。(我的是deepin系统)
  3. 查看开发机器中安装maven环境(为了尽力在服务器中安装同样版本的maven)。
    查看IDEA 的maven版本。
    在这里插入图片描述
  4. 安装jenkins并启动,保证可用,略,上一篇文章就是。
  5. 安装jenkins中必要的插件,maven-intergration,publish-over-ssh
  6. 配置插件。

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

Publish over SSH的配置

在这里插入图片描述
配置
https://blog.csdn.net/MenofGod/article/details/81941223

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

  1. 多模块module项目的构建
    如果是单模块的项目构建很简单找到对应的target文件夹里生成的jar文件运行即可。
    但多模块的项目怎么做呢?

    我的这个试验项目的结构如下图:
    在这里插入图片描述
    在箭头所指的这个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生成。
因此我们并不会每次用手工,要用命令来完成。

  1. 相关命令和脚本

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

启动命令:

java -jar testcode.jar

可看到项目启动成功。
在这里插入图片描述

尝试一下kill进程(这句命令有点复杂,以后还要学习,来自https://blog.csdn.net/zjh_746140129/article/details/80904876)):

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

在这里插入图片描述
可见kill成功。

扩展阅读:

grep -v grep https://blog.csdn.net/dieyong/article/details/93008252
awk用法 https://www.cnblogs.com/bugingcode/p/8287914.html
linux判断某个进程是否存在https://blog.csdn.net/dc_show/article/details/41806265

我专门打开一个浏览器页面访问这个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

在这里插入图片描述

然后执行,顺利成功!
在这里插入图片描述

  1. 但由于脚本原因,启动了springboot,脚本并不结束和返回,jenkins就一直处于“build进行中”的状态,如下图。
    如何处理呢?
    在这里插入图片描述
    这里要提到nohup命令,资料很多,随便搜一下就行了。
    这里放上我之前的记录。
    linux nohup

  2. jenkins 构建完成后又不可访问了,怎么回事?
    经查,是jenkins build完成后又kill掉了相关进程,现在设法不让它kill就好了。

于是把脚本改造了一下,放在了两个地方。
在这里插入图片描述
在这里插入图片描述
然后终于成功了。

在这里插入图片描述

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

发布了177 篇原创文章 · 获赞 47 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/festone000/article/details/104027964
今日推荐