Jenkins是一个基于Java开发的开源的实现项目可持续集成的工具,解决了平时开发项目之后需要手动打包与发布项目的问题,将这个流程实现自动化;需要了解更多关于Jenkins的内容可以点击 官网
因为项目需要,近期要准备使用jenkins部署springboot单服务项目,详细记录一下其中遇到的问题和使用过程,留下脚印。
如果是Linux安装直接下载第一个.war包即可,如果是Windows版本点击Windows框会直接下载一个.msi的可直接运行的文件,当然.war包在Linux和Windows环境都能运行,但war包有个前提是需要安装jre,直接终端中使用命令java -version查看是否安装jdk,并且jenkins构建还需要安装git环境和maven环境,具体安装过程请自行百度。
- 安装jdk
- 安装git
- 安装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}
在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了。
这一步是在Jenkins本身不能新建maven项目的任务的情况下才安装maven集成插件,如果你的Jenkins已经支持maven项目的任务的话就不需要进行安装即当你新建任务的时候有maven项目的选项就不需要安装(因为本文介绍的发布spring boot项目的方式采用的是Jenkins的 maven项目 的任务,所以需要安装 maven插件 ,如果采用比如 Pipeline 流水线等任务发布则可以不安装此maven插件):
没有的话进行安装:
选择 Install without restart 立即安装
可勾选如下多选框,进行自动重启Jenkins
重启Jenkins之后,就可以在已安装的插件里面搜索到刚刚安装的插件,并且创建任务时也有 maven项目 的选项:
将jdk、git、maven配置好之后在页面的最下方有 保存 按钮
因为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
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包存放的路径。
在My Views中找到刚刚创建的任务,点击右边的执行按钮,执行任务
执行成功-如果安装Jenkins的机器上的maven没有build过这个项目,第一次build的话需要下载很多的包,时间会长一些
点进去该任务->工作空间 可以看到构建之后的项目结构
Jenkins构建的项目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!"