shell脚本发布docker springboot项目示例

docker、git、Maven、jdk8安装略过。
使git pull或者git push不需要输入密码操作方法

约定:

路径:/opt/springbootdemo,

项目:springbootdemo,

打包:springbootdemo.jar,

docker容器名字:springbootdemo

Dockerfile

内存不够自行调整:"-Xmx6144m","-Xms6144m"

bash 复制代码
FROM openjdk:8
MAINTAINER "hsj<2356899074@qq.com>"
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY ./target/springbootdemo.jar ./springbootdemo.jar
EXPOSE 55530
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dfile.encoding=utf-8","-jar","-Xmx6144m","-Xms6144m","/springbootdemo.jar","--spring.profiles.active=prod"]

pro_build.sh

注意:#!/bin/bash -ilex ,如果jenkins远程ssh登录执行sh脚本,并且jekins安装在docker容器里面 ,这句代码很有必要。

bash 复制代码
#!/bin/bash -ilex
#环境变量
who am i
set -e
# ./nginx -s reload
#当前springboot目录
cd /opt/springbootdemo

echo "拉取gitlib最新代码..."
git status && git pull

#if判断其实是多余的,set -e 当$? 不等于0时候已经退出了
if [[ $? -ne 0 ]]
then
  echo "拉取gitlib最新代码失败,准备退出"
  exit 1
fi
echo "拉取gitlib最新代码成功"

echo "准备构建jar包..."
mvn clean package

echo "准备停止docker容器并删除旧的docker镜像"
CID=$(docker  ps -a | grep springbootdemo| xargs | awk '{print $1}')
IID=$(docker  ps -a | grep springbootdemo| xargs | awk '{print $2}')
if [[ -n "$CID" ]]; then
   echo "删除旧的容器,CID=$CID"
   docker rm -f $CID
fi
if [[ -n "$IID" ]]; then
   echo "删除旧的镜像,IID=$IID"
   docker rmi -f $IID
fi
echo "准备构建新的镜像并运行新的容器"
docker build -t springbootdemo.
IID_NEW=$(docker images | grep springbootdemo | xargs | awk '{print $3}')
echo "运行的新镜像:${IID_NEW}"
docker run -d --name springbootdemo -p 55530:55530 ${IID_NEW}

echo "正在扫描docker容器启动状态..."
set +e
start_time=$(date -d "today" +%s);
#springbootdemo: Started Application
while true; do docker logs springbootdemo 2>&1 | grep "Started Application" > /dev/null;
if [[ $? -eq 0 ]]; then
   echo "发布完毕";
   break;
fi
end_time=$(date -d "today" +%s);
t=$(($end_time - $start_time));
if [[ $t -gt 360 ]]; then
   echo "超过6分钟,发布失败" ;
   exit 1;
fi;
#避免CPU轮询飙升
sleep 30s;
done
相关推荐
大只鹅31 分钟前
Springboot3整合ehcache3缓存--XML配置和编程式配置
spring boot·缓存
执笔诉情殇〆1 小时前
springboot集成达梦数据库,取消MySQL数据库,解决问题和冲突
数据库·spring boot·mysql·达梦
hdsoft_huge2 小时前
Spring Boot 高并发框架实现方案:数字城市的奇妙之旅
java·spring boot·后端
高山莫衣2 小时前
Docker Desktop导致存储空间不足时的解决方案
docker·容器·eureka
鹏大师运维2 小时前
在银河麒麟V10 SP1上手动安装与配置高版本Docker的完整指南
linux·运维·docker·容器·麒麟·统信uos·中科方德
lovely_nn2 小时前
docker 介绍
docker·k8s
Ahlson2 小时前
【fnNAS】docker的nginx配置html
nginx·docker·容器·fnnas
LuckyLay2 小时前
Compose 常用命令详解——AI教你学Docker
docker·容器·eureka
moppol3 小时前
容器化 vs 虚拟机:什么时候该用 Docker?什么时候必须用 VM?
运维·docker·容器
没有名字的小羊3 小时前
7.可视化的docker界面——portainer
docker·容器·eureka