原理图

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



由上图可以清晰的看到,只要我们再本地的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项目的更多相关文章

  1. 利用Eclipse中的Maven构建Web项目(三)

    利用Eclipse中的Maven构建Web项目 1.将Maven Project转换成动态Web项目,鼠标右键项目,输入"Project Facets" 2.依据Dynamic W ...

  2. 利用Eclipse中的Maven构建Web项目报错(二)

    利用Eclipse中的Maven构建Web项目 1.错误描述 [INFO] Scanning for projects... [INFO] [INFO] Using the builder org.a ...

  3. 利用Eclipse中的Maven构建Web项目报错(一)

    利用Eclipse中的Maven构建Web项目 1.在进行上述操作时,pom.xml一直报错 <project xmlns="http://maven.apache.org/POM/4 ...

  4. 利用Eclipse中的Maven构建Web项目(二)

    利用Eclipse中的Maven构建Web项目 1.新建源文件夹,Java Resources鼠标右键,"New-->Source Folder" 2.新建src/main/ ...

  5. 利用Eclipse中的Maven构建Web项目(一)

    利用Eclipse中的Maven构建Web项目 1.新建一个Maven Project,"New-->Other..." 2.选择"Maven Project&qu ...

  6. Jenkins 集成Maven打包SpringBoot项目并自动部署到Tomcat服务器

    提前条件: 1.在Jenkins服务器上安装Git.JDK和Maven 2.准备另一台服务器并安装Tomcat 3.Gitlab服务器 4.Gitlab仓库中上传SpringBoot项目代码 第一步, ...

  7. 使用Maven构建Android项目

    http://www.ikoding.com/build-android-project-with-maven/ 之前一直在做WEB前端项目,前段时间接手第一个Android项目,拿到代码之后,先试着 ...

  8. 转】用Maven构建Hadoop项目

    原博文出自于: http://blog.fens.me/hadoop-maven-eclipse/ 感谢!   用Maven构建Hadoop项目 Hadoop家族系列文章,主要介绍Hadoop家族产品 ...

  9. maven构建java项目、web项目

    maven构建java项目.web项目 一.mvn构建web项目 1安装mvn(包括path) 2命令:mvn archetype:create -DgroupId=cn.edu.sdau.neat ...

随机推荐

  1. Jsp和Servlet关系

    为什么会出现Jsp? 其实对于服务器来说它只认识Servlet,我们完全可以在Servlet用resp.getWriter().write("");画出网页的界面,但是仅仅一个很简 ...

  2. Centos7 更新配置为阿里源步骤

    一.yum更换配置源过程 1.备份原有的.repo源文件 首先需要将之前的源进行备份(一般重要的配置文件都需要有备份的意识) # 进入源配置目录 cd /etc/yum.repos.d # 创建备份文 ...

  3. reactor---元数据驱动的表单

    class NameForm extends React.Component {  constructor(props) {    super(props);    this.state = {    ...

  4. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:表示需要谨慎操作的按钮

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. INI文件,WritePrivateProfileString()和GetPrivateProfileString()函数----转载

    INI文件就是扩展名为“ini”的文件.在Windows系统中,INI文件是很多,最重要的就是“System.ini”.“System32.ini”和“Win.ini”.该文件主要存放用户所做的选择以 ...

  6. Python学习第五课——基本数据类型一之list

    列表(list) # 列表 (list) # 创建列表 列表里面可以是数字.字符串.列表.布尔值...什么都可以 li = [1, 2, 3, "hanhan", "ju ...

  7. 微信小程序request请求实例,网络请求。

    最近微信小程序开始开放测试了,小程序提供了很多api,极大的方便了开发者,其中网络请求api是wx.request(object),这是小程序与开发者的服务器实现数据交互的一个很重要的api. 官方参 ...

  8. Django 3.0中不推荐使用的及已经删除的功能

    3.0中不推荐使用的功能 django.utils.encoding.force_text()和smart_text()的别名被弃用.如果您的代码支持Python 2,smart_str()并且 fo ...

  9. Vim学习1移动光标

    vim adventure上面做了大量练习,是个好软件只是需要收费 HJKLWBE 首先HJKL分别是移动上下左右的 H:光标左移 J:下移 K:上移 L:右移 W:跳转到下一个单词的第一个字,注意是 ...

  10. (转)C#的 GC工作原理基础

    作为一位C++出身的C#程序员,我最初对垃圾收集(GC)抱有怀疑态度,怀疑它是否能够稳定高效的运作:而到了现在,我自己不得不说我已经逐渐习惯并依赖GC与我的程序“共同奔跑”了,对“delete”这个习 ...