注意:
此shell脚本仅供基本使用,还有好多待完善的地方
大致流程
- 使用Jenkins从Gogs拉取仓库代码,根据选择的参数和输入的标签,确定要编译打包jar的模块,以及要制作的docker镜像信息等
- 编译打包成jar包,然后根据代码目录里的Dockfile文件制作docker镜像
- 把docker镜像上传到Harbor镜像仓库
4.最后远程连接容器主机,执行shell脚本,该脚本主要作用是登陆Harbor仓库,拉取第二步制作好的docker镜像,停用正在运行的相关容器,然后启动新容器
关键点:
- shell脚本中第一次运行容器的命令
- 停止正在运行的容器所使用的标签,shell减法计算
- Jenkins所在主机运行远程主机的shell脚本,除了配置jenkins所在主机的jenkins用户免密登陆远程主机外,还要给远程主机的shell脚本增加可执行权限
问题:
每次停止一个容器,新运行一个容器后,eureka界面都会显示出来,初步怀疑是因为eureka界面注册使用的那个地址不固定有关,详看截图
#!/bin/bash
IMAGE=$1
TAG=$2
PULL_IMAGE=192.168.75.12/springcloud/${IMAGE}:${TAG}
# 计算减法,并输出带有小数点前面的0, 比如 0.3-0.1=0.2
CURRENT_IAMGE=`echo "$TAG - 0.1" | bc | awk '{printf "%.1f", $0}'`
echo "登陆Harbor仓库"
docker login http://192.168.75.12 -u admin -p harbor12345
if [ $? -eq 0 ]; then
echo "登陆Harbor仓库成功"
else
echo "登陆Harbor仓库失败"
return 1
fi
echo "从Harbor仓库拉取指定镜像"
docker pull ${PULL_IMAGE}
# 启动命令
# docker run -d --name spring-cloud-eureka-server-demo -p 9011:9011 192.168.75.12/springcloud/spring-cloud-eureka-server-demo:0.1
# 更新容器操作
echo "先停止现有的容器"
docker stop ${IMAGE}_${CURRENT_IAMGE}
echo "等待10秒"
sleep 10
echo "启动"
if [ ${IMAGE} == "spring-cloud-eureka-server-demo" ]; then
docker run -d --name ${IMAGE}_${TAG} -p 9011:9011 ${PULL_IMAGE}
elif [ ${IMAGE} == "spring-cloud-eureka-client-demo" ]; then
docker run -d --name ${IMAGE}_${TAG} -p 9012:9012 ${PULL_IMAGE}
elif [ ${IMAGE} == "spring-cloud-eureka-consumer-demo" ]; then
docker run -d --name ${IMAGE}_${TAG} -p 9013:9013 ${PULL_IMAGE}
fi
# docker run -d --name spring-cloud-eureka-server-demo -p 9011:9011 ${IMAGE}
if [ $? -eq 0 ]; then
echo "更新容器成功"
else
echo "更新容器失败"
return 1
fi