shell脚本发布docker springboot项目示例

docker、git、Maven、jdk8安装略过。
使git pull或者git push不需要输入密码操作方法
约定:
路径:/opt/springbootdemo,
项目:springbootdemo,
打包:springbootdemo.jar,
docker容器名字:springbootdemo
在这里插入图片描述

在这里插入图片描述

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

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容器里面,这句代码很有必要。
在这里插入图片描述

#!/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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/506966.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯刷题day13——自助餐【算法赛】

一、问题描述 食堂最近推出了自助取餐功能,可以通过盘子的形状自动计算费用。你参与到自助计算价格的项目工作中。视觉组的同学已经帮你通过图像识别把盘子图片转换为了字符串,你只需要计算具体的价格即可。 餐盘的费用如下表所示: 你将会得到n 个字符串,请按照价格表计算…

【Linux】动态库与静态库

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.为什么要有库&…

数字人克隆系统源码部署,该如何选择源码厂家

短视频领域成2024年风口&#xff0c;数字化概念成为我们生活中不可或缺的一部分。在数字化的大潮中&#xff0c;有很多创业者开始瞄准了数字人源码部署这个商业风口项目。而许多企业开始考虑采用数字人系统进行业务拓展和服务升级&#xff0c;那么如何选择适合自己的数字人源码…

立白打造统一数据工作台,报表查看更方便,领导决策更高效!

数字化时代&#xff0c;数据就好比隐藏的宝藏&#xff0c;“寻宝人”若想精准、便捷地探索宝藏&#xff0c;就需要应用清晰、明确的藏宝图——数据门户。 今天&#xff0c;小编就带领大家&#xff0c;看看作为国内500强的日化品牌如何携手迅易科技搭建和应用统一数据门户&…

专题三_二分查找(1)

目录 704. 二分查找 解析 题解 34. 在排序数组中查找元素的第一个和最后一个位置 解析 题解 69. x 的平方根 解析 题解 704. 二分查找 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 解析 题解 class Solution { public:int search(vector<int>& …

【考研数学】零基础120+备考计划(附资源分享)

大学四年没学过数学&#xff0c;那数学就等于零基础 如果想参加考研数学&#xff0c;并且想获得一个比较好的分数&#xff0c;那我建议&#xff0c;一定要从头开始学&#xff0c;从最简单的开始学&#xff01; 在考研的选择上&#xff0c;我们都知道&#xff0c;有数学一、数…

【C++】一篇文章带你深入了解string

目录 一. 为什么学习string&#xff1f;二、 标准库中的string2.1 string介绍2.2 string的常用接口说明2.2.1 string对象的常见构造2.2.1.1 [string()](https://legacy.cplusplus.com/reference/string/string/string/) ---- 无参构造函数2.2.1.2 [string(const char* s)](http…

Vue限制文本框显示字数,多余用...代替

1.在filters.js封装过滤器方法 import Vue from vue//设置只显示几个字符串&#xff0c;默认20个 Vue.filter(filterAmount, function(value, n) {if(!n) n 20;if(value && value.length > n) {value value.substring(0, n) ...;}return value;} )2.在main.js引…

JavaEE 初阶篇-深入了解多线程安全问题(指令重排序、解决内存可见性与等待通知机制)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 指令重排序概述 1.1 指令重排序主要分为两种类型 1.2 指令重排序所引发的问题 2.0 内存可见性概述 2.1 导致内存可见性问题主要涉及两个方面 2.2 解决内存可见性问…

【计算机考研】 408难吗?学到什么程度才能考130?

如果你是92科班&#xff0c;我觉得130是有机会的 。如果双非或者跨考&#xff0c;我觉得是很难的。可以关注一下可软和软微的复试通知。可以看到数学130以上的大有人在&#xff0c;408能考到130的寥寥无几。 而且从今年来看&#xff0c;对于基础还行&#xff0c;只用王道的我来…

LeetCode算法——数组/字符串篇

对刷过的算法进行总结&#xff0c;所用解法都是最符合我个人逻辑的&#xff0c;以后再刷的话就看这篇帖子了 # 代码随想录——数组理论基础 首先要知道数组在内存中的存储方式&#xff0c;这样才能真正理解数组相关的面试题 数组是存放在连续内存空间上的相同类型数据的集合 …

蓝桥备赛——贪心

题干 AC Code n, w = map(int, input().split()) # n种类, w核载重 a = [] # [[weight1, value1], [weight2, value2], ...] for _ in range(n):a.append(list(map(int, input().split()))) a.sort(key=lambda x: x[1] / x[0], reverse=True)maxVal = 0for i in a:if i[0…

亮数据Bright Data,引领高效数据采集新体验

随着互联网和大数据的日益普及&#xff0c;我们对于高速、安全和无限畅通的网络体验追求越发迫切&#xff0c;随之而来的网络安全和隐私保护变得越来越重要。IP代理作为一种实用的代理工具&#xff0c;可以高效地帮我们实现网络数据采集&#xff0c;有效解决网络安全问题&#…

大数据量查询语句优化

测试单表模糊查询&#xff0c;符合条件的数量为&#xff1a; -- 查看总共有多少条数据 select count(0) from "REGISTER_HOUSE_INFO" where SEAT_NAME like %1% ;未优化&#xff1a;测试单表模糊查询分页&#xff0c;符合条件的数据为&#xff1a; select * from …

单词精灵,Android 记单词 app 开发

使用 Android Studio 开发了一款 记单词 app —— 《单词精灵》 关键词&#xff1a;单词精灵 A. 项目描述 《单词精灵》是一款专为Android平台设计的单机记单词应用。该应用旨在帮助用户系统、高效地扩展词汇量&#xff0c;提升英语水平。应用内置丰富的词库和记忆方法&#…

C++AVL树拓展之红黑树原理及源码模拟

前言&#xff1a;我们之前已经从零开始掌握AVL树http://t.csdnimg.cn/LaVCChttp://t.csdnimg.cn/LaVCC 现在我们将继续学习红黑树的原理并且实现插入等功能&#xff0c;学习本章的前提要求是掌握排序二叉树和AVL树&#xff0c;本章不再提及一些基础知识&#xff0c;防止本文结…

LeetCode-560. 和为 K 的子数组【数组 哈希表 前缀和】

LeetCode-560. 和为 K 的子数组【数组 哈希表 前缀和】 题目描述&#xff1a;解题思路一&#xff1a;一边算前缀和一边统计。这里用哈希表统计前缀和出现的次数&#xff0c;那么和为k的子数组的个数就是当前前缀和-k的个数&#xff0c;即preSums[presum - k]。画个图表述就是&a…

sparksql执行流程

1. SparkSQL的自动优化 我们前面的文章已经说过spark RDD定义好后&#xff0c;执行经过DAG sechduler划分号内存管道、逻辑任务&#xff0c;然后经由task scheduler来分配到具体worker来管理运行&#xff0c;RDD的运行会完全按照开发者的代码执行 如果开发者水平有限&#xff…

一文了解JAVA的常用API

目录 常用kpimathSystemRuntimeObjectObjectsBigIntegerBigDecima正则表达式包装类 常用kpi 学习目的&#xff1a; 了解类名和类的作用养成查阅api文档的习惯 math 工具类。因为是工具类&#xff0c;因此直接通过类名.方法名(形参)即可直接调用 abs&#xff1a;获取参数绝对…

Spring如何进行事务管理?什么是面向切面编程?

喜欢就点击上方关注我们吧&#xff01; 本篇将带你快速了解Spring事务管理以及面向切面编程(AOP)相关知识。 一、事务 1、概述 1&#xff09;事务是一组操作的集合&#xff0c;是一个不可分割的工作单位&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败。 2&#xff…