利用jenkins远程部署springcloud项目

上一篇中介绍了如何自动构建Maven父项目,那具体的每个子项目该如何部署呢,怎么自动打包运行在docker中呢,下面我们来揭晓

  • 我们为每一个微服务新建一个自由风格的jenkins任务image-20210410122651563
  • image-20210410123017801
  • 这里我们不需要使用Gitee拉取代码,因为上一篇父项目已经替我们拉取并打包好了所有子项目的jar包image-20210410123236224
  • 构建过程中我们需要shell替我们到父项目的工作空间中找到相应子项目的jar包及需要构建docker镜像的Dockerfile文件和部署脚本![]image.png

附上shell内容

#!/bin/bash
#目标服务器B,即要运行jar包的服务器
serverB="远程服务器B的ip"
#目标服务器B存放jar包路径
Bpath=/home/mogu_blog/admin
#jenkins工作目录
cd ${WORKSPACE}
echo "源服务器A上jenkins的工作目录:"`pwd`
echo "当前构建的任务名称:$JOB_NAME"
#传输jenkins构建好的jar包和Dockerfile到目标服务器B上
for host in $serverB
do    
	echo "目标服务器:*********$host*********"    
	echo "目标服务器存放jar包位置:**************$Bpath**************"    
	ssh root@$host     scp -r /home/jenkins/workspace/mogu/${JOB_NAME}/target/*.jar root@${host}:${Bpath}    
	scp -r /home/jenkins/workspace/mogu/${JOB_NAME}/src/main/resources/Dockerfile root@${host}:${Bpath}    
	scp -r /home/jenkins/workspace/mogu/${JOB_NAME}/src/main/resources/Jenkinsfile root@${host}:${Bpath}    
	echo "文件传输完成!!!!"    
	echo "检查目标服务器$host->$Bpath路径下是否存在jar包和Dockerfile"
done
  • 构建后的操作,进入B服务器的目录,执行jenkinsfile脚本,jenkinsfile这个脚本我是放在项目中的,项目结构图如下:image-20210411173500274image-20210411172713993
  • jenkinsfile脚本如下
#!/bin/sh
NUM_1=`docker ps -a | grep admin | grep -vi grep |wc -l`
echo "容器是否存活:******************"${NUM_1}"******************"
NUM_2=`docker images | grep admin | grep -v grep | wc -l`
echo "镜像是否存在:******************"${NUM_2}"******************"
if [[ "${NUM_2}"!="0" ]];then     
echo "---------镜像存在!!!,判断容器是否存活-----------"     
if [[ "${NUM_1}"!="0" ]];then         
echo "---------容器存活,停止容器并删除容器---------"        
docker stop admin        
docker rm admin     
fi    
echo "--------删除镜像---------"   
docker rmi admin
fi
echo "----------开始构建镜像......--------------"
docker build -t admin /home/mogu_blog/admin/
echo "---------运行容器------------"
docker run -dit --name admin -p 8601:8601 admin:latest
rm -rf /home/mogu_blog/admin/*
  • 因为我是部署到远程服务器B,并在docker中运行,所以这里需要编写Dockerfile文件,代码如下:
from java:8
## 设置挂载点
VOLUME /tmp
## 复制并修改重命名
ADD mogu_admin-0.0.1-SNAPSHOT.jar admin.jar
# 运行jar包
RUN bash -c 'touch /admin.jar'ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/admin.jar"]
  • 点击保存,子项目构建任务就完成了。只要在git上有新的代码提交,父项目会触发webhook自动构建,等待父项目构建后,需手动点击子任务,这样就可以远程部署服务到另一台服务器并运行了。
    Jenkinsfile百度云盘地址,提取码:fyrg
    Dockerfile百度云地址,提取码:x66y

Q.E.D.


一个热爱生活的95后精神小伙