docker jenkins + springboot + maven + svn 实现热部署
docker环境安装
jdk环境安装,配置环境变量
maven环境安装,配置环境变量
1、前往maven官网,下载maven安装包,官网地址为http://maven.apache.org/download.cgi,
2、创建maven目录,
mkdir maven
3、进入maven目录,
cd maven
4、上传到服务器,
rz
5、进行压缩,
tar -zxvf
6、配置环境变量,
vi /etc/profile
在最下方添加maven环境变量,
export MAVEN_HOME=/data/maven/apache-maven-3.6.3/
export PATH=$PATH:/data/maven/apache-maven-3.6.3/bin
7、重新加载配置文件,
source /etc/profile
8、查看maven环境变量是否成功,
echo $MAVEN_HOME
jenkin安装
1、docker下载jenkins
docker pull jenkins/jenkins:latest
下载latest版本的jenkins,初次下载时间会久一点,等待下载完成,
2、docker运行jenkins,
docker run -p 8088:8080 -d --name jenkins_dev -v /data/jenkins:/var/jenkins_home -v /usr/java/jdk-11.0.6:/usr/java/jdk-11.0.6 -v /data/maven/apache-maven-3.6.3:/data/maven/apache-maven-3.6.3 -v /data/webroot/apache-tomcat-9.0.41:/data/webroot/apache-tomcat-9.0.41 jenkins/jenkins;latest
命令解析,
-p 是宿主机和容器的端口映射,-p宿主机端口:容器端口,jenkins默认端口为8080所以这里的映射端口需要固定为8080,宿主机端口可随意,
-v 是宿主机和容器的目录映射,这里要把jdk和maven的目录也映射上,否则后续jenkin无法访问,
-d 后台执行,
–name 给docker的jenkins起个名字,
3、复制初始密码,
4、界面访问jenkins,等待初始化,
url输入,ip:端口,5、安装推荐插件,
如果碰到插件安装失败,可以重复几次试试,6、下载svn插件,
7、配置全局环境,
8、配置maven环境,
取消自动安装,9、配置jdk环境,
取消掉自动安装,
10、点击保存,
11、配置远程SSH(可选,远程执行shell命令时用到)
下载ssh插件,
进入配置界面,
新增ssh配置,
点击保存,12、安装maven构建插件,
13、新建项目
14、选择svn代码服务器,
配置svn代码服务器环境,15、配置构建命令,
16、选择构建成功后执行,
17、构建成功后,远程执行shell命令,
18、选择配置的ssh环境,输入shell命令,
这个shell脚本命令是在构建成功后,直接远程杀掉原有jar进程,重新启动,
pid=ps -ef|grep service.jar|grep -v "grep"|awk '{print $2}'
echo “Will service.jar: pid” ]
then
kill -9 ${pid}
fi
sleep 2
mv -f /data/service.jar /data/service.jar
BUILD_ID=dontKillMe nohup /usr/java/jdk/bin/java -jar /data/service.jar > /data/log.log 2>&1 &
sleep 15
pid_new=ps -ef| grep service.jar| grep -v "grep"| awk '{print $2}'
echo “success service.jar has been started.The new pid is ${pid_new}”
19、点击立即构建,
20、结束,
jenkins碰到的坑,
1、jenkins默认启动端口为8080,要么改配置,要么在docker启动时,映射的容器端口一定得是8080,
2、springboot会把日志反馈到控制台,所以在jenkins启动时,总会认为jar包没有启动结束,会一直卡在启动中,这时候可以在启动命令中,把jar的日志指定输出到某一文件中即可,
nohup java -jar jar包 > log.log 2>& 1 &
3、记得加上BUILD_ID=dontKillMe,不要杀死我,命令,否则jenkins在结束时,会把jar启动命令也杀掉,
4、命令中注意使用绝对路径,否则很可能找不到,