利用jenkins远程部署springcloud项目
在上一篇中介绍了如何自动构建Maven父项目,那具体的每个子项目该如何部署呢,怎么自动打包运行在docker中呢,下面我们来揭晓
- 我们为每一个微服务新建一个自由风格的jenkins任务
- 这里我们不需要使用Gitee拉取代码,因为上一篇父项目已经替我们拉取并打包好了所有子项目的jar包
- 构建过程中我们需要shell替我们到父项目的工作空间中找到相应子项目的jar包及需要构建docker镜像的Dockerfile文件和部署脚本![]
附上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这个脚本我是放在项目中的,项目结构图如下:
- 远程部署到其他服务器,请参考这篇文章publish over ssh实现Jenkins远程部署
- 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
评论区