闲来无事,玩一下jenkins自动部署,好记性不如烂笔头子,发个博客记个笔记,若能帮助到路过兄弟,也算有点额外的用途,毕竟不是专家,如发现文章有误,欢迎指摘,虚心接受,共同进步。
目的:
通过jenkins,自动化完成从git仓库拉取代码、maven编译打包、上传目标服务器并启动服务。
所需工具:
名称 | 版本 | 备注 |
Jenkins | war包版本 | |
JDK | 1.8.0_241 | |
Maven | 3.6.3 | |
Git | 1.8.3.1 | |
VMware | 11.5.2 | 如果自己有测试服务器则可不用 |
Gitee | 代码托管,也可以用github、gitlab等等。 |
所需服务器:
为了方便理解,这里使用两个虚拟linux服务器,均为CentOS7,当然你也可以使用docker。
服务器 | 说明 |
172.16.62.129 | Jenkins服务器,需要安装jenkins、jdk、maven、git |
172.16.62.130 | 目标应用服务器,需要安装jdk,编好一个sh启动脚本。 |
另外:
还需要准备一个java的maven项目,代码上传到git上。本文用idea创建了一个springboot工程,只写了一个HelloWorld controller,上传到了Gitee。
1.启动jenkins
要是没有就先下载一个(自行百度),本文中,jenkins放在【172.16.62.129】服务器中,服务器需要先安装好所需要的工具,jdk,git,maven,并配置好环境变量,然后执行 java -jar jenkins.war,启动jenkins。然后安装推荐插件啥的,如果插件速度慢,可以参见另一篇文章 jenkins一些常见问题。
2.一些jenkins配置
点击左侧的【Manage Jenkins】,然后右边的【Global Tool Configuration】,然后如下图所示,配置JKD,Git,Maven。
3.配置jenkins上传jar包目标服务器
点击左侧的【Manage Jenkins】,然后右边的【Configure System】,如下图所示,如果要是多个目标服务器,可以一直加,本文测试就使用一个。
4.新建及配置Item
本例名应该是boot_demo,没有test,这里就不改了,有点瑕疵。起个名,选择构建一个maven项目。
配置git信息,地址 用户名密码 分支啥的。
配置Publish Over SSH
上图关键地方的文本:
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
export BUILD_ID=dontKillMe
#执行启动脚本
sh /home/app/boot_demo.sh restart
#改回原来的BUILD_ID值
export BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID
5.目标服务器启动脚本boot_demo.sh
#!/bin/bash
JAVA_HOME=/opt/jdk1.8.0_241
APP_NAME=/home/app/boot_demo-0.0.1-SNAPSHOT.jar
APP_PATH=/home/app/
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq 0 ]; then
echo "${APP_NAME} is already running. pid=${pid}"
else
nohup ${JAVA_HOME}/bin/java -jar ${APP_NAME} >${APP_PATH}start.out 2>&1 &
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
sleep 5
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
注意:启动脚本注意使用了 JAVA_HOME=/opt/jdk1.8.0_241 全路径,否则jenkins执行java -jar 会失败,日志会提示【无法运行命令"java": 没有那个文件或目录】之类的错误。
6.执行构建
如果你控制台输出的也是这样式儿的,那就哦了。
7.验证
先看看目标服务器172.16.62.130 /home/app的情况和进程情况。
再在浏览器验证一下helloworld。
完活~!