Jenkins保姆级使用:Jenkins部署springboot项目,手把手实战经历

简介: Jenkins是一个基于Java开发的开源的实现项目可持续集成的工具,解决了平时开发项目之后需要手动打包与发布项目的问题,将这个流程实现自动化;需要了解更多关于Jenkins的内容可以点击 官网因为项目需要,近期要准备使用jenkins部署springboot单服务项目,详细记录一下其中遇到的问题和使用过程,留下脚印。

第一:前期准备

1.打开官网首页便有下载按钮或者使用下载网址直接下载

如果是Linux安装直接下载第一个.war包即可,如果是Windows版本点击Windows框会直接下载一个.msi的可直接运行的文件,当然.war包在Linux和Windows环境都能运行,但war包有个前提是需要安装jre,直接终端中使用命令java -version查看是否安装jdk,并且jenkins构建还需要安装git环境和maven环境,具体安装过程请自行百度。

  1. 安装jdk
  2. 安装git
  3. 安装maven


注意:最好安装jdk8/jdk11,因为Jenkins的新版本需要jdk8才能支持,如果是jdk8以下的话可能会不兼容;

export JAVA_HOME=/usr/java/jdk1.8.0_341
export CLASSPATH=$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
GIT_HOME=/usr/local/git
export PATH=$PATH:$GIT_HOME/bin
MAVEN_HOME=/home/zhaosj/maven_home/apache-maven-3.8.1
export PATH=${MAVEN_HOME}/bin:${PATH}

2.安装Jenkins

2.1 war包启动方式: Linux(本过程使用linux方式安装,其它方式请自行百度)

在Jenkins的官方文档中,找到关于war包的文档,里面有说安装Jenkins的最低硬件要求以及war包的启动方式即:java -jar jenkins.war即可启动,需要指定启动端口的话使用 java -jar jenkins.war --httpPort=26000 或者 nohup java -jar jenkins.war --httpPort=26000 & 第二种 nohup 的启动方式为后台启动即关闭该终端Jenkins服务不会关闭。

就是说Jenkins的初始密码是850a9ad6638640f8905c748adf1069c7或者在/root/.jenkins\secrets\initialAdminPassword文件中查看


3.访问Jenkins

Jenkins启动后默认使用的8080端口,如果通过 --httpPort 参数指定了端口号,则使用指定的端口号;访问方式:安装jenkins服务的服务器ip:端口号;如:127.0.0.1:8080

如果不能访问的话,关闭终端,重新执行 java -jar jenkins.war 命令出现如下输出即启动成功:

如果有加载的界面出现等一会儿会来到这个界面,这里需要输入刚刚启动Jenkins的时候初始化的密码,

输入后我们安装推荐的插件即可:

等待安装完成(时间有点长):

完成后来到这个界面:

填写好信息后下一步:

点击保存并完成,点击开始:

到此Jenkins安装完毕。


注意:如果是在Linux上使用war包形式启动的Jenkins服务,通过 Linux的 ip:Jenkins端口 无法访问到Jenkins的话,可能是因为Linux的防火墙开启的,如果你是本地虚拟机上安装的centos系统的话,可以直接将防火墙关闭:

关闭命令:systemctl stop firewalld.service

开启命令:systemctl start firewalld.service

查看防火墙状态命令:systemctl status firewalld.service

关闭之后就可以访问到Jenkins了。


第二:配置过程

1.安装maven插件 Maven Integration/Maven Integration plugin

这一步是在Jenkins本身不能新建maven项目的任务的情况下才安装maven集成插件,如果你的Jenkins已经支持maven项目的任务的话就不需要进行安装即当你新建任务的时候有maven项目的选项就不需要安装(因为本文介绍的发布spring boot项目的方式采用的是Jenkins的 maven项目 的任务,所以需要安装 maven插件 ,如果采用比如 Pipeline 流水线等任务发布则可以不安装此maven插件):

没有的话进行安装:

选择 Install without restart 立即安装


可勾选如下多选框,进行自动重启Jenkins

重启Jenkins之后,就可以在已安装的插件里面搜索到刚刚安装的插件,并且创建任务时也有 maven项目 的选项:

2.全局插件配置

将jdk、git、maven配置好之后在页面的最下方有 保存 按钮


3.新建任务

3.1 新建maven项目的任务

3.2 配置git仓库

因为Jenkins需要拉取git上的代码,在Jenkins中配置git仓库的SSH地址即可

复制GitHub仓库中项目的SSH地址



Jenkins中填写SSH地址


如果填写GitHub仓库的SSH地址之后,出现如下错误:


An internal error occurred during form field validation (HTTP 403). Please reload the page and if the problem persists, ask the administrator for help.


按照提示刷新页面即可,只是刷新页面之前填写的数据会丢失,需要重新填写;一般来说刷新之后再次填写SSH地址之后,不会出现该错误了,但是有可能会出现如下的错误:

解决方式:

首先引起这个问题的原因可能是以下两个原因:

1.Jenkins中没有安装github插件或者Jenkins的全局插件配置没有配置到本机上的可执行的git文件目录(即git.exe的目录)- - -这两点的配置在前面准备工作中已做

2.未在git仓库中配置git账号的SSH公钥或者未在Jenkins中配置git账号的私钥即Credentials(可以选SSH私钥或者用户名密码模式)

Jenkins中配置Credentials:


选择SSH私钥(默认是用户名和密码形式即输入对应的GitHub账号和密码):

输入Credentials名称和粘贴私钥:

保存之后可以看到有刚刚添加的Credentials,选择这个Credentials,鼠标移开过会儿错误提示就会消失

选择对哪个分支进行构建/build

3.3 maven设置

Pre Steps即在bulid项目之前需要做的操作,比如执行shell脚本,不需要的话就不选择

设置maven命令即build项目的命令,不设置Jenkins也会执行maven打包,我设置的 clean install -Dmaven.test.skip=true

勾选Add timestamps to the Console Output之后Jenkins会将构建项目的日志输出在Jenkins的控制台

Maven Version出现如下提示的话需要在全局插件配置中设置本地maven的目录-在前面准备工作中已做在这里插入图片描述

全局插件配置中设置好maven之后,错误提示消失

如果在pom.xml下面提示未找到pom.xml的话先不用管,后面执行任务会成功,再来看这里的时候,错误提示会消失。


Post Steps即在bulid项目之后需要做的操作,比如执行shell脚本,不需要的话就不选择

因为我们发布的是spring boot的项目,我们需要在构建完成后执行启动spring boot项目的脚本命令,选择Run only if build succeeds(仅在构建成功时运行) -> Execute shell(执行shell)

在输入框里面写入需要执行的脚本命令


mv /root/.jenkins/workspace/Test01/my-test-member/my-test-member-biz/target/my-test-member-biz-0.0.1-SNAPSHOT.jar /usr/project/member/my-test-member-biz-0.0.1-SNAPSHOT.jar
cd /usr/project/member/
BUILD_ID=dontKillMe nohup java -Xms512m -Xmx512m -jar my-test-member-biz-0.0.1-SNAPSHOT.jar &

这里的三条命令:

第一条命令:将Jenkins打包成功后生成的 my-test-member-biz-0.0.1-SNAPSHOT.jar 包,移动到 /usr/project/member/ 目录下,所以需要先创建好 /usr/project/member/ 目录

第二条命令:切换到 /usr/project/member/ 目录下

第三条命令:BUILD_ID=dontKillMe执行启动命令,nohup java -Xms512m -Xmx512m -jar my-test-member-biz-0.0.1-SNAPSHOT.jar &,如果不写BUILD_ID=dontKillMe则不会将后面的java启动命令当作是启动项目的命令执行,可能会遇到项目启动后自动关闭不进行后台运行

注意: 第一条命令 /root/.jenkins/workspace/Test01 是我的项目Jenkins打包之后存放jar包的路径,根据任务的名称不一样这个路径也不一样,/usr/project/member 是我想将启动的jar包统一放在该目录下,所以也根据自己情况来。

如果不清楚Jenkins打包之后的jar包路径,这里可以先不写,直接进行后面打包操作,在控制台中看jar包存放的路径。


3.4 手动执行

在My Views中找到刚刚创建的任务,点击右边的执行按钮,执行任务

执行成功-如果安装Jenkins的机器上的maven没有build过这个项目,第一次build的话需要下载很多的包,时间会长一些

点进去该任务->工作空间 可以看到构建之后的项目结构

Jenkins构建的项目jar包的位置

点击对应的构建记录

查看控制台输出

3.5 实现项目的启动、关闭、jar包备份

## 关闭已运行的该服务的进程
filename=my-test-member-biz-0.0.1-SNAPSHOT.jar
PID=$(ps -ef | grep $filename | grep -v grep | awk '{ print $2 }')
if [ ${PID} ]; 
then
 echo 'Application is stpping...'
 echo kill $PID DONE
 kill -9 $PID
else
 echo 'Application is already stopped...'
fi
## 备份jar包
filename=my-test-member-biz-0.0.1-SNAPSHOT.jar
var=$(date +%Y%m%d%H%M)
cp $filename $var$filename
echo "backup jar success!"
## 将项目关闭、启动、备份的脚本合并如下
filename=my-test-member-biz-0.0.1-SNAPSHOT.jar
PID=$(ps -ef | grep $filename | grep -v grep | awk '{ print $2 }')
if [ ${PID} ]; 
then
 echo 'Application is stpping...'
 echo kill $PID DONE
 kill -9 $PID
else
 echo 'Application is already stopped...'
fi
mv /root/.jenkins/workspace/Test01/my-test-member/my-test-member-biz/target/$filename /usr/project/member/$filename
cd /usr/project/member/
BUILD_ID=dontKillMe nohup java -Xms512m -Xmx512m -jar $filename &
var=$(date +%Y%m%d%H%M)
cp $filename $var$filename
echo "backup jar success!"


相关文章
|
1月前
|
Java 数据库连接 Maven
springBoot:项目建立&配置修改&yaml的使用&resource 文件夹(二)
本文档介绍了如何创建一个基于Maven的项目,并配置阿里云仓库、数据库连接、端口号、自定义启动横幅及多环境配置等。同时,详细说明了如何使用YAML格式进行配置,以及如何处理静态资源和模板文件。文档还涵盖了Spring Boot项目的`application.properties`和`application.yaml`文件的配置方法,包括设置数据库驱动、URL、用户名、密码等关键信息,以及如何通过配置文件管理不同环境下的应用设置。
|
14天前
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
53 1
SpringBoot获取项目文件的绝对路径和相对路径
|
5天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
17 2
|
9天前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
32 8
|
9天前
|
jenkins Java 持续交付
Gitee+Jenkins+SonarQube代码上线的实战操作
通过以上步骤,就可以实现基于Gitee、Jenkins和SonarQube的代码上线流程,确保代码的质量和上线过程的自动化和可控性。在实际操作中,可以根据项目的具体需求和环境进行适当的调整和优化。
|
1月前
|
JavaScript 前端开发 Java
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
340 1
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
|
16天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
40 2
|
16天前
|
前端开发 Java Spring
SpringBoot项目thymeleaf页面支持词条国际化切换
SpringBoot项目thymeleaf页面支持词条国际化切换
45 2
|
16天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
33 1
|
18天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。