利用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密码,根据提示找到密码输入,后面可以自己设置一个帐号密码。
接下来就会有一个推荐插件安装的页面。我个人推荐直接跳过这个步骤,因为在内地的网络环境安装会非常的卡,同时很有可能会把程序给卡崩溃,这个后面会提到解决方法。
之后进入就可以看到如下界面。

插件安装
进入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这个命令查找路径。

2.系统配置
(1)Publish over SSH
点击add server添加一个远程的应用服务器。我的如下图所示

name:一个名字,自己随意填写。
HostName:应用服务器地址,可以是ip地址,也可以是一个域名。
Username:应用服务器的用户,这里生产环境最好不用root,我就随意了。
Remote Directory:应用服务器的访问目录,请确定你的用户有该目录的操作权限。
Password:勾选上面的选择框,然后输入你的密码即可。当然这里也有其它验证方式, 具体自己找一下。
拉到底下,还有一个测试按钮,可以测试自己的配置是否成功。
3.凭证配置
点击 :

输入你的GitHub帐号密码,这里是用于后面的GitHub仓库代码的拉取,后面其它需要用到凭证的地方也可以以同样的方式添加。
搭建项目
jenkins的配置已经初步完成,我本文的例子是使用Maven来构建的SpringBoot项目。所以接下来先创建一个Maven项目。输入名字即可创建完成,接下来就是项目的配置了。
1.通用配置
General配置可以不配置,但这里我选择勾选上丢弃旧的构建,防止构建的jar包挤满硬盘空间。详情如图所示。

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

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

如上图所示,这里要确定的是你的pom.xml的位置、执行的命令。另外,可以在高级选项那里跳过测试环节,不过这不是一种推荐的做法,测试还是很重要的。
5.构建后操作
jenkins在构建完成后,会根据这里的配置执行相关操作。就如一开始的那张图片一样,这里的流程是:把jar包发送到应用服务器,执行启动脚本

服务器我们之前已经配置好了,现在解释一下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
配置完成,点击保存即可,可以尝试先手动构建一次,如果成功了,就可以继续接下来的自动化构建。
自动化构建的文章下次再更新。
利用Jenkins实现jdk11+Maven构建springboot项目的更多相关文章
- 利用Eclipse中的Maven构建Web项目(三)
利用Eclipse中的Maven构建Web项目 1.将Maven Project转换成动态Web项目,鼠标右键项目,输入"Project Facets" 2.依据Dynamic W ...
- 利用Eclipse中的Maven构建Web项目报错(二)
利用Eclipse中的Maven构建Web项目 1.错误描述 [INFO] Scanning for projects... [INFO] [INFO] Using the builder org.a ...
- 利用Eclipse中的Maven构建Web项目报错(一)
利用Eclipse中的Maven构建Web项目 1.在进行上述操作时,pom.xml一直报错 <project xmlns="http://maven.apache.org/POM/4 ...
- 利用Eclipse中的Maven构建Web项目(二)
利用Eclipse中的Maven构建Web项目 1.新建源文件夹,Java Resources鼠标右键,"New-->Source Folder" 2.新建src/main/ ...
- 利用Eclipse中的Maven构建Web项目(一)
利用Eclipse中的Maven构建Web项目 1.新建一个Maven Project,"New-->Other..." 2.选择"Maven Project&qu ...
- Jenkins 集成Maven打包SpringBoot项目并自动部署到Tomcat服务器
提前条件: 1.在Jenkins服务器上安装Git.JDK和Maven 2.准备另一台服务器并安装Tomcat 3.Gitlab服务器 4.Gitlab仓库中上传SpringBoot项目代码 第一步, ...
- 使用Maven构建Android项目
http://www.ikoding.com/build-android-project-with-maven/ 之前一直在做WEB前端项目,前段时间接手第一个Android项目,拿到代码之后,先试着 ...
- 转】用Maven构建Hadoop项目
原博文出自于: http://blog.fens.me/hadoop-maven-eclipse/ 感谢! 用Maven构建Hadoop项目 Hadoop家族系列文章,主要介绍Hadoop家族产品 ...
- maven构建java项目、web项目
maven构建java项目.web项目 一.mvn构建web项目 1安装mvn(包括path) 2命令:mvn archetype:create -DgroupId=cn.edu.sdau.neat ...
随机推荐
- 「国家集训队」Crash的数字表格
题目描述 求(对 \(20101009\) 取模,\(n,m\le10^7\) ) \[\sum_{i=1}^n\sum_{j=1}^m\operatorname{lcm}(i,j)\] 大体思路 推 ...
- windows下pycharm连接vagrant的python环境
- [Write-up]Mr-Robot
关于 下载地址 目标:找到3个Key 哔哩哔哩视频. 信息收集 用的是Host-only,所以网卡是vmnet1,IP一直是192.168.7.1/24 nmap -T4 192.168.7.1/24 ...
- Acwing897 最长公共子序列
题目大意:求两个字符串的最长公共子序列的长度. 分析:这是一个典型的dp入门题,LCS. 代码: #include<bits/stdc++.h> using namespace std; ...
- Metric类型
Metric类型 在上一小节中我们带领读者了解了Prometheus的底层数据模型,在Prometheus的存储实现上所有的监控样本都是以time-series的形式保存在Prometheus内存的T ...
- 高斯消元几道入门题总结POJ1222&&POJ1681&&POJ1830&&POJ2065&&POJ3185
最近在搞高斯消元,反正这些题要么是我击败了它们,要么就是这些题把我给击败了.现在高斯消元专题部分还有很多题,先把几道很简单的入门题总结一下吧. 专题:http://acm.hust.edu.cn/vj ...
- Adroid ViewPage+GridView实现每页6个元素,三页滑动切换
//}//public class MainActivity extends Activity {// private static final float APP_PAGE_SIZE = 16.0f ...
- 嵊州普及Day3T4
利内罗女士准备来到意大利进行修行.意大利由 n 个城市和 m 条道路构成,道路是双向的.到达第 i 个城市时,她可以取得该城市的全部信仰,并获得 ai 点能力提升,但因为在一个城市可以取得的信仰有 ...
- 十五 JSP开发模式&MVC设计模式
JSP开发模式: JavaBean + JSP : 缺点:页面代码过多,不利于维护,JSP页面代码变得臃肿 Servlet + JavaBean + JSP :MVC设计模式 M:model 模 ...
- HDU 3065 病毒侵袭持续中 (模板题)
病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...