文章目录
- 前言
- 准备工作
- 配置全局工具
- 安装Publish over SSH插件并配置
- 新建项目
- 项目配置
- 编写钩子程序
前言
Jenkins的整体流程可以参考下图
整体流程:
开发人员将工作区的代码提交到代码库(svn或者git),代码库再调用钩子程序通知Jenkins(我已经更新了代码,你也要重新部署一版了),钩子程序是我们自己编写,这个钩子程序很容易后续会提到怎么编写钩子程序
Jenkins收到代码库的提醒之后立马去代码库里获取最新的源码,再通过调用maven插件将源码打包成jar,再通过Publish over SSH插件将jar包传到一台或者多台服务器上,再调用服务器的脚本启动jar包,这就是Jenkins工作的整体流程。
上图仅作参考,图中流程为部署ssm项目流程,因此与部署springboot项目有些不同。springboot项目打包成jar包为不是war包了,使用的也不是Deploy to web container插件部署了,而是Publish over SSH
准备工作
1.需要在linux服务器中安装JDK参考文章:centos7下安装JDK
2.需要在linux服务器中安装Maven参考文章:centos7下安装Maven
3.需要在linux服务器中安装svn参考文章:centos7下安装SVN
4.需要在linux服务器中安装Jenkins参考文章:Jenkins之路(一):Jenkins安装
配置全局工具
配置全局工具也就是配置Jenkins编译打包时要用到的JDK以及Maven
配置这三块地方
1.指定maven的配置文件
这里的配置就跟你在自己的Windows电脑指定maven的settings配置文件一样
第1和第3在下拉框中选这一下就行,不要用选择默认配置就行
第2步和第4步的值是一样的,里面填的的是你linux服务器中安装好的maven的settings配置文件
因为我的是在这个路径下,所以填的是/home/apache-maven-3.6.3/conf/settings.xml
2.配置jdk
点击JDK安装
别名可以随便起,把自动安装Install automatically的勾选去掉,JAVA_HOME填你在服务器上安装的jdk的路径
我的是在这个位置,因此值是/home/java/jdk1.8.0_251
3.配置maven
点击maven安装
步骤跟上面的JDK差不多,输入maven别名,取消自动安装Install automatically的勾选,填入MAVEN_HOME的值,这里的值可以把上面maven配置中的文件路径的值拷过来/home/apache-maven-3.6.3/conf/settings.xml,再去掉conf层和settings就行,当然前提你上面的配置是对的
最终/home/apache-maven-3.6.3
安装Publish over SSH插件并配置
点击Jenkins管理,选择插件管理
搜索插件 Publish over,直接安装
等待安装
安装完成后配置Publish Over SSH
拉到最后面找到Publish over SSH,点击新增
name:随便填
Hostname:服务器IP(这个就是要把打包好的jar包发送并运行的目标主机)
Username:root
Remote Directory:要发送到的远程主机的目录,这里我们填 / 根目录就行,因为后面这个路径我们还要配置
填好之后在点击高级配置密码和端口
勾选Use password authentication, or use a different key
端口使用默认的22端口,密码输入你的root用户对应的密码
点击Test configuration按钮,出现Success说明链接成功,点击保存就行了
新建项目
上面全局的JDK和Maven已经配置好了,Publish over SSH插件也已经安装完成了,下面我们新建一个Jenkins项目
输入名称,选择自由风格的项目,点击确定
创建好之后就可以在首页看到相对应的项目了
项目配置
点击项目名进行配置
1.配置源码管理
选择subversion,配置svn
Repository URL:配置svn的版本库
Credentials:svn版本库的的用户名、密码
点击添加,选择Jenkins
在这里输入你的svn版本库的用户名、密码,点击添加
添加之后还要选择你添加的用户名、密码
添加成功之后,下面这行字就会自动消失,如果还在说明你的配置有问题,检查下url和用户名、密码
2.配置构建步骤
点击增加构建步骤,选择图中的配置
maven版本选择我们上面配置好的maven,目标填入clean install,这个就是maven打包命令了
3.配置构建后操作
点击增加构建后操作步骤,选择图中所示,这个配置就是将通过maven打包好的jar包发送到目标服务器
Source files配置:target/*.jar 源文件地址 ,地址的目录是相对于jenkins workspace的目录
Remove prefix:target/ 去除的文件地址。在Source files输入框中填入的地址,会默认在服务器下创建相同的文件夹,所以需要将我们不需要的文件夹在这里剔除掉
Remote directory:/home/project 发送jar包到目标服务器的路径,
Exec command:/home/project/start.sh 文件传输任务执行完毕后,在远程服务器上执行的脚本
目标服务器需要存在要执行的脚本文件
脚本文件源码
export JAVA_HOME PATH CLASSPATH
JAVA_HOME=/home/java/jdk1.8.0_251 #你自己的jdk路径
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
echo " =====关闭Java应用======"
PROCESS=`ps -ef |grep java |grep -v grep|grep /home/project/JenkinTest.jar|awk '{print $2}'`
for i in $PROCESS
do
echo "Kill the $1 process [ $i ]"
kill -9 $i
done
echo " =====启动Java应用======"
nohup java -jar /home/project/JenkinTest.jar > /home/test/out.log 2>&1 &
echo $! > savePid.txt
cat savePid.txt
rm savePid.txt
拿来直接用需要修改下面四个地方,jdk的环境变量和打包好的jar包名以及日记文件,因为远程执行脚本不会加载服务器的环境变量,因此需要在脚本文件中手动引入jdk的环境变量,启动jar时nohup java -jar需要用到jdk里的命令,所以要引入jdk环境变量
修改脚本的权限,不行会提示权限不足的问题
chmod 777 start.sh
r:可读,表示可以读取内容,代表4
w:可写,表示可以编辑内容,但是不可以删除文件,代表2
x: 可执行,表示可以执行文件。代表1
rwx=4+2+1=7
测试
手动点击构建
查看控制台输出
出现success,表示构建成功
并且我们去目标服务器查看,会看到有一个jar并且已经在运行了,以及日志文件
可以通过ip+端口访问项目了
如果目标服务器已经有了jar包和日志文件,但你在浏览器还访问不到的话,可能是你端口没开,使用命令查看已经开放的端口
firewall-cmd --list-ports
编写钩子程序
到这里我们的Jenkins已经差不多设置好了,前面我们已经可以手动构建项目,然后自动打包部署到服务器了,只差当我们提交代码到svn时自动帮我们构建了,
当有代码提交到svn自动构建Jenkins项目这一步需要一个钩子程序,当svn有代码更新自动调用钩子程序构建
1.配置远程触发构建的token值
再次配置下Jenkins项目
勾选 触发远程构建 (例如,使用脚本)
身份验证令牌的值我们可以随便填,然后保存
我们把红线画出来的这段拷出来
JENKINS_URL/job/JenkinsTest/build?token=TOKEN_NAME
将JENKINS_URL替换成我们访问Jenkins的url
TOKEN_NAME替换成我们刚刚在身份验证令牌中填的值,最终地址
http://192.168.91.135:8055//job/JenkinsTest/build?token=mytoken
然后我们在浏览器中访问这个地址,Jenkins就会帮我们自动构建
这样我们我们触发构建就不是点击这个按钮构建,而是通过访问地址构建
2.curl命令触发构建
上面我们在浏览器访问地址就能自动构建,那我们在Linux系统访问这个地址也能让Jenkins自动构建
那我们linux系统怎么访问http地址呢?
使用linux的curl命令
Linux 的 curl 命令用来发送 HTTP 请求。
-X 参数:指定请求方式
-v 参数:显示响应结果
-u 参数:携带用户名/密码
命令格式:
curl -X post -v -u [Jenkins 用户名]:[Jenkins 密码] http://[服务器 IP 地址]:[服务器端口 号]/jenkins/job/[Jenkins 项目名称]/build?token=[身份验证令牌]
用户名:密码后面的这一段就是刚刚我们在浏览器访问的地址
最终
curl -X post -v -u honger:jenkins08168114 http://192.168.91.135:8055//job/JenkinsTest/build?token=mytoken
我们直接在Linux系统运行这个命令就能触发Jenkins构建了
好,我们离最终的成功只差一步了
3.svn钩子程序触发构建
我们在我们的服务器找到svn版本库的这个位置
hooks意思就是钩子,然后把post-commit.tmpl复制一份并重命名为post-commit,post-commit就是svn提交之后会执行的文件
cd /home/svn/test/hooks
cp post-commit.tmpl post-commit
编辑post-commit
vim post-commit
把里面的内容全部注释点,加入我们刚刚的curl命令,保存退出
curl -X post -v -u honger:jenkins08168114 http://192.168.91.135:8055//job/JenkinsTest/build?token=mytoken
给钩子程序授权
chmod 755 post-commit
然后我们的钩子程序就编写完成了,svn有新的提交时会执行post-commit文件也就是执行curl命令,自己自行测试就可以了
到这里我们Jenkins就全部配置完成了。
有帮助请点赞
有问题请留言