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<[email protected]>"
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
相关推荐
haciii11 分钟前
深入理解数据库隔离级别与Spring Boot事务管理
spring boot·mysql
饺子大魔王的男人41 分钟前
Docker环境下FileRise私有云盘在飞牛NAS的部署与穿透实践
运维·docker·容器
崔lc2 小时前
Springboot项目集成Ai模型(阿里云百炼-DeepSeek)
java·spring boot·后端·ai
耀耀_很无聊2 小时前
03_跨域问题解决
java·spring boot·跨域·satoken
Lw老王要学习2 小时前
Linux容器篇、第一章_02Rocky9.5 系统下 Docker 的持久化操作与 Dockerfile 指令详解
linux·运维·docker·容器·云计算
寒山李白2 小时前
Spring Boot面试题精选汇总
java·spring boot·后端·面试
橙子小哥的代码世界3 小时前
【大模型RAG】Docker 一键部署 Milvus 完整攻略
linux·docker·大模型·milvus·向量数据库·rag
磊叔的技术博客3 小时前
随笔小记:SpringBoot 3 集成 SpringDoc OpenAPI
spring boot·后端
计算机毕设定制辅导-无忧学长3 小时前
Spring Boot 与 Kafka 的深度集成实践(一)
spring boot·kafka·linq
crud4 小时前
Spring Boot 使用 @Async 实现异步操作:从入门到实战,一文讲透
java·spring boot