利用Jenkins实现jdk11+Maven构建springboot项目

时间:2022-01-27 14:32:37

原理图

鉴于网上很多资料一上来直接就开干了,这里我先把这几天所经历的理解化成一张图,以便后续内容更加容易理解。

利用Jenkins实现jdk11+Maven构建springboot项目

由上图可以清晰的看到,只要我们再本地的Idea提交代码到GitHub远程仓库,随后Github触发一个web hook(简单来说就是一个Http请求)。随后Jenkins接收到这个请求之后,开始根据我们预先设置好的方式构建部署包。然后通过ssh推送到应用服务器部署(部署方式很多样,可以根据个人需求部署)。

前期准备

Jdk11安装

由于jenkins服务器是java语言开发的应用,这里需要先安装jdk,而我也想统一jdk的版本,这里选择使用Oracle提供的最新版jdk11。下载推荐使用迅雷下载,比一般的浏览器要快一点。

点击下载地址下载,这里使用的是jdk-11.0.6_linux-x64_bin.rpm版本,适合centos系统的安装。上传到你的jenkins服务器,使用安装命令完成。

rpm -ih jdk-11.0.6_linux-x64_bin.rpm

Jenkins安装

点击下载地址下载安装包。同样使用以下安装命令完成安装。

rpm -ih jenkins-2.204.2-1.1.noarch.rpm

启动jenkins。

systemctl start jenkins

提示:使用jdk11可能会出现如下的提示:

AWT is not properly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=true"

实际上这个选项已经启用了,只是jdk11把awt的组件去除了,所以需要安装这一部分组件中。执行一下命令即可:

yum install java-1.7.0-openjdk urw-fonts

Maven安装

由于我的项目是基于Maven的SpringBoot项目,所以需要以Maven构建一个部署包,这里顺便安装一下。

点击下载地址下载。

解压压缩包,我把maven放在目录/opt/maven中,具体的环境变量设计请自行百度,这里的安装目录和后续配置有关,所以我提了一下。

Jenkins的设置

jenkins默认在8080端口部署,所以打开浏览器页面就能进入页面。进入页面后需要输入一个原始的admin密码,根据提示找到密码输入,后面可以自己设置一个帐号密码。

接下来就会有一个推荐插件安装的页面。我个人推荐直接跳过这个步骤,因为在内地的网络环境安装会非常的卡,同时很有可能会把程序给卡崩溃,这个后面会提到解决方法。

之后进入就可以看到如下界面。

利用Jenkins实现jdk11+Maven构建springboot项目

插件安装

进入Manage Jenkins => Manage Plugins =>Available 查找自己想要的插件。这里推荐几款这次教程需要的插件:

1.Localization: Chinese (Simplified)

中文翻译包,想看英文的可以跳过。

2.GitHub plugin、GitHub Integration Plugin

GitHub相关。

3.Maven Integration plugin

Maven相关。

4.Publish Over SSH

Maven生成的Jar包,通过这个插件进行推送,并执行应用服务器的脚本。

插件安装系列问题:

(1)速度慢,经常失败。

更改插件镜像的地址,在Advance选项下面,Update Site这里填写相应的URL地址。这个需要自行百度查找哪个提供的插件镜像较快,个人推荐一个:http://mirror.xmission.com/jenkins/updates/update-center.json。这个同时需要一点耐心去完成,因为在内地的网络无论你用哪个都不会快。而我用香港的服务器都是5s之内就能完成。

(2)插件安装提示有依赖插件没有更新或安装

这个按照提示去找对应的依赖插件即可,同时有的插件完成安装后需要重启jenkins,所以准备时间会比较繁琐一点。

变量配置

1.全局工具配置

这里以jdk为例,其它的git、和maven以同样的方式处理,如果没安装,自行百度安装。

如下图所示,取消勾选自动安装,然后JAVA_HOME就是你Jenkins服务器的JAVA_HOME路径,可以使用which java这个命令查找路径。

利用Jenkins实现jdk11+Maven构建springboot项目

2.系统配置

(1)Publish over SSH

点击add server添加一个远程的应用服务器。我的如下图所示

利用Jenkins实现jdk11+Maven构建springboot项目

name:一个名字,自己随意填写。

HostName:应用服务器地址,可以是ip地址,也可以是一个域名。

Username:应用服务器的用户,这里生产环境最好不用root,我就随意了。

Remote Directory:应用服务器的访问目录,请确定你的用户有该目录的操作权限

Password:勾选上面的选择框,然后输入你的密码即可。当然这里也有其它验证方式, 具体自己找一下。

拉到底下,还有一个测试按钮,可以测试自己的配置是否成功。

3.凭证配置

点击 :利用Jenkins实现jdk11+Maven构建springboot项目

利用Jenkins实现jdk11+Maven构建springboot项目

输入你的GitHub帐号密码,这里是用于后面的GitHub仓库代码的拉取,后面其它需要用到凭证的地方也可以以同样的方式添加。

搭建项目

jenkins的配置已经初步完成,我本文的例子是使用Maven来构建的SpringBoot项目。所以接下来先创建一个Maven项目。输入名字即可创建完成,接下来就是项目的配置了。

1.通用配置

General配置可以不配置,但这里我选择勾选上丢弃旧的构建,防止构建的jar包挤满硬盘空间。详情如图所示。

利用Jenkins实现jdk11+Maven构建springboot项目

2.源码管理

这里我选用的是Git管理,配置如下所示:

利用Jenkins实现jdk11+Maven构建springboot项目

3.构建触发

顾名思义,jenkins会根据这里的配置选择在什么时候构建的你项目。这里你可以先选择跳过,先自己手动构建,后续我会讲述利用GitHub的web hook触发构建。

4.Maven的构建选项

利用Jenkins实现jdk11+Maven构建springboot项目

如上图所示,这里要确定的是你的pom.xml的位置、执行的命令。另外,可以在高级选项那里跳过测试环节,不过这不是一种推荐的做法,测试还是很重要的。

5.构建后操作

jenkins在构建完成后,会根据这里的配置执行相关操作。就如一开始的那张图片一样,这里的流程是:把jar包发送到应用服务器,执行启动脚本

利用Jenkins实现jdk11+Maven构建springboot项目

服务器我们之前已经配置好了,现在解释一下Transfer里面的字段含义。

Source files:要发送的文件,这里我们只需要把生成的jar发送过去即可。路径匹配和可以参考linux命令。

Remove prefix:目前还没弄清具体含义。

Remote directory:将文件放在应用服务器的该目录下,需要注意的是:这里的路径是基于前面的ssh server路径配置的。例如:前面的路径配置了/usr/local/,而这里配置了project/temp/。那么文件的完整路径应该是:/usr/local/project/temp/*.jar

Exec command:应用服务器中的启动脚本路径,可以根据自己的喜好放置。同时我不太懂shell编程,写了一个参考版的启动脚本,看看就好。

#!/bin/sh
PROJECT_DIR="/usr/local/project/"
#删除当前已启动的旧项目,只适用于只有一个java项目的时候
proName="java"
echo "${proName}"
PID=$(ps -e|grep ${proName}|awk '{printf $1}')
echo "$PID"
if [ $? -eq 0 ]; then
echo "process id:$PID"
else
echo "process ${proName} not exit"
exit
fi
kill $PID
#删除已存在与project目录的jar包
rm -f ${PROJECT_DIR}counsel*.jar
#复制新的jar到当前路径
mv ${PROJECT_DIR}temp/counsel*.jar ${PROJECT_DIR}
#启动新的项目
nohup java -jar ${PROJECT_DIR}counsel*.jar >${PROJECT_DIR}output

配置完成,点击保存即可,可以尝试先手动构建一次,如果成功了,就可以继续接下来的自动化构建。

自动化构建的文章下次再更新。