简单的Shell脚本实现自动化构建部署-适合前后端分离的小网站

news2025/1/23 7:11:00

1. 背景

大家在生活中经常会自己写一点小代码。然后部署在公有云的服务器上。但是一般像阿里,腾讯等服务商,提供的机器内存并不是很大。如果想装入一个jenkins之类的服务,会比较占用CPU和内存的资源。但是人手的部署又是比较麻烦的。所以我这里提供了一个思路,使用shell脚本来简单实现自动化构建。

2.基本原理

这个很简单的,我以比较常规的 vue.js + spring的方式来介绍一下。我们需要在服务器上安装git和配置好ssh key,这个不做过多介绍。具体的流程图如下。

 3. 具体实现

这里我将它拆分为以下几个步骤。

3.1 拉取代码 && 将后台代码打包成jar

# 拉代码 打包后台jar start
cd /usr/local/cicd/blog-backend/ 
git pull origin master 

cd /usr/local/cicd/blog-client/ 
git pull origin master &
echo "-----pull code completed------"

# page jar
cd /usr/local/cicd/blog-backend/ 
mvn clean compile
mvn clean package
echo "-----mvn package completed------"

rm -rf /usr/local/cicd/blog-api-0.0.1-SNAPSHOT.jar
cp /usr/local/cicd/blog-backend/target/blog-api-0.0.1-SNAPSHOT.jar /usr/local/cicd
echo "-----copy file success------"
#拉代码 打包后台jar end

3.2 移除旧的container及image运行最新代码打包成的container

这里使用了一点bash脚本的变量,通过shell命令拿到旧的containerId,并将其移除掉。

删除image相对复杂一点,通过grep命令拿到指定的image的id, 再移除掉。具体的可以参考下方的link.

最后是启动新的container,通过dockerfile将jar打包进container,再docker run即可。这里贴上我的简单的Dockerfile.可以看到我的shell脚本以及jar,Dockerfile在同一目录下,所以COPY *.jar就能轻易找到对应的文件。

FROM openjdk:8-jdk-alpine
COPY *.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
# docker 运行 jar start
cd /usr/local/cicd
container_id=$(sudo docker ps -aqf "name=blob")
docker stop $container_id
docker rm $container_id
echo "----rm old container success------"
echo "----container id: { $container_id }----"
#https://www.cnblogs.com/sjptech/p/10865490.html
# 通过repository name 过滤并删除 image
docker images | grep -E "blob" | awk '{print $3}' | uniq | xargs -I {} docker rmi --force {}
echo "----rm old image success------"

docker build -t blob:v1 .
echo "-----build success------"
docker run -d -p 8888:8888 --name blob blob:v1
echo "-----docker run success------"
# docker 运行 jar end

3.3. 打包前端代码

这似乎是最简单的部分了,仅需在服务器端提前安装好node,执行命令打包即可。最后将build好的文件放置回nginx的目录即可。

# copy 前端资源到nginx 的html目录 start
cd /usr/local/cicd/blog-client
npm install
npm run build
echo "-----npm over------"
rm -rf /usr/share/nginx/html/*
cp -r ./dist/* /usr/share/nginx/html
echo "----nginx file copy over------"
# copy 前端资源到nginx 的html目录 end
echo "全部结束啊啊啊"

4. 效果展示及附件

4.1 效果展示

 

 4.2 完整文件下载

见此link, Download

 5. 其他优化

相信比较懒的小伙伴看出来了,这样做似乎也不够自动化。还需要链接到服务器去执行脚本,能不能更加自动化呢。这个确实可以,参考jenkins的实现方式,可以使用github等平台的webhook,只要简单的配置好url. 当有push操作时,github会触发一个call到配置好的url上。这样当接收到请求之后,只要简单触发上面的脚本执行即可。

由于篇幅有限,将在下篇文章中介绍具体的实现。码字不易,希望大家能点个赞哈。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

相较于传统fNIRS,时域矩量fNIRS在多大程度上提高了对大脑活动的估计?

导读 意义:电子技术的进步使通道更多的时域功能近红外光谱(TD-fNIRS)得到发展。由于高阶时域矩的深度选择性,时域矩量分析已被提出用于提高对大脑的敏感度分析。研究者提出了一种综合时域(TD)矩量数据和辅助生理测量(如短分离通道)的一般线性模型(GLM)&…

OpenMV初体验

Openmv初体验 OpenMV IDE OPENMV4-STM32H743 import sensor, image, time sensor.reset() sensor.set_pixformat(sensor.RGB565) # 图像彩色/灰白 sensor.set_framesize(sensor.QVGA) # 图像大小 sensor.skip_frames(time 2000) # 几秒后开始或跳过几帧 cnt 0 #sensor.set_…

【初试复试第一】脱产在家二战上岸——上交819考研经验

笔者来自通信考研小马哥23上交819全程班学员 先介绍一下自己,我今年初试426并列第一,加上复试之后总分600,电子系第一。 我本科上交,本科期间虽然没有挂科但是成绩排名处于中下游水平。参加过全国电子设计大赛,虽然拿…

【机器学习】P20 模型的诊断 - 验证集

从本节博文开始,将会有几篇博文的内容探究的是如何对模型进行评估,模型是好是坏?模型能否拟合? P20 (本篇)模型的诊断,验证集P21 正则化P22 过拟合和欠拟合的探究2,偏差与方差P23 一…

【内摹访谈】谈谈AI爆发前夜的B端设计

本文来自摹客产品设计团队(MPD)的设计专栏“内摹访谈”。专栏介绍:专栏名称来源于西方美学理论「内摹仿说」,意指审美活动与摹仿活动紧密相连,审美不只针对表象动作,其核心在于由物及我,从表观带…

MiniGPT-4开源了,史无前例的AI图片内容分析,甚至能用于逻辑验证码推理识别

MiniGPT-4: github库 https://github.com/Vision-CAIR/MiniGPT-4 在线测试网址 https://minigpt-4.github.io/ 案例一:分析图片内容 出结果较慢,建议图片小一点,并且提示文字尽可能简短 The man in the image is wearing a white tank…

kotlin协程flow retryWhen当功能函数加载失败后重试(3)

kotlin协程flow retryWhen当功能函数加载失败后重试&#xff08;3&#xff09; import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.coroutines.runBlocking import java.lang.NullPointerExceptionfun main(args: Array<String>) {runBl…

电脑卡顿反应慢怎么处理?电脑提速,4个方法!

案例&#xff1a;电脑卡顿反应慢怎么处理&#xff1f; 【快帮帮我&#xff01;我的电脑现在越用越卡了&#xff0c;有时候光是打开一个文件都要卡好几分钟&#xff0c;我真的太难了&#xff0c;有什么可以加速电脑反应速度的好方法吗&#xff1f;万分感谢&#xff01;】 随着…

产品知识沉淀

梁宁-产品思维30讲 看一个人或看一个产品&#xff0c;可以由表及里的五层来做观察和判断&#xff1a;感知层、角色层、资源层、能力圈和存在感 存在感之于人就好像生存之于动物一样&#xff0c;是触发情绪和推动行动的开关。 动物的状态和情绪&#xff0c;都是关乎它的生存需…

数据结构---八大排序

专栏&#xff1a;算法 个人主页&#xff1a;HaiFan. 本章内容为大家带来排序的相关内容&#xff0c;希望大家能多多支持。 八大排序 前言插入排序直接插入排序希尔排序(缩小增量排序) 选择排序选择排序堆排序 交换排序冒泡排序快速排序hoare版挖坑版前后指针法 归并排序 前言 …

Python中的@cache有什么妙用?

Python中的cache有什么妙用&#xff1f; 本文同步投给#创作纪念日#活动&#xff0c;2019年4月8日我在C站发了第一篇博文&#xff0c;至今200多篇了&#xff0c;感兴趣可以访问我的主页&#xff1a;小斌哥ge。 看到官方发的私信&#xff0c;是鼓励博主写一些感悟&#xff0c;由于…

【MySQL】数据库基础知识

1、数据库简介 1.1 什么是数据库 数据库其实就是"基于数据结构"实现出来的一类软件&#xff0c;这类软件可以用来对数据进行管理&#xff0c;管理也就是对数据进行增删查改等一些操作 为什么说数据库是基于数据结构实现出来的"一类软件"呢&#xff1f; 答&…

本地化部署大语言模型 ChatGLM

本地化部署大语言模型 ChatGLM 本地化部署大语言模型 ChatGLM前期筹备GitHub 基础包语言模型文件基础配置显存查看方法 Anaconda 模块Anaconda 环境创建根目录操作基础依赖加载transformers 和 protobuf 库加载Pytorch 源修改依赖库补充补充依赖 pypi 配置cchardet 依赖错误解决…

开放式耳机好用吗,盘点几款口碑不错的开放式耳机

​开放式耳机作为一种全新的耳机形态&#xff0c;已经成为了当前市场上非常火爆的一款产品。由于无需入耳佩戴&#xff0c;可以很好的避免了耳膜受到损伤&#xff0c;而且也能够让我们在佩戴眼镜时也能够正常使用。加上开放式耳机的音质和舒适度都要优于其他类型的耳机&#xf…

全球上线!ABB中国涡轮增压器分拆 – 数据清理阶段完成

ABB是数字行业的技术前沿者&#xff0c;拥有四项主营业务&#xff1a;电气化&#xff0c;工业自动化&#xff0c;运动控制以及机器人和离散自动化。ABB总部位于瑞士苏黎世&#xff0c;业务遍及100多个国家&#xff0c;拥有约105&#xff0c;000名员工。2021年&#xff0c;该公司…

dockerDesktop依赖wsl,及docker可视化推荐Portainer

也是今天无意中发现的Portainer 之前采用的1panel和宝塔做运维可视化 现在换成dockerPortainer 宝塔和1panel和portranier对比 宝塔广告太多&#xff0c;而且不适合深入了解运维技术 1panel个人感觉无广告颜值很高&#xff0c;但是还是有局限&#xff0c;不适合深入了解运维…

MAC 用 brew安装 mysql并且设置开机自启动

目录 一.安装 mysql 1.安装 mysql 2.启动 mysql 3.关闭 mysql 4.初次安装需要修改 root 密码 5.验证密码 二.设置开机启动 1.找到plist 文件 2.将启动文件 plist 复制到 LaunchAgents目录 3.验证 一.安装 mysql 1.安装 mysql 1.安装默认版可以直接执行安装命令 brew…

上岸美团,我的面经!

作者&#xff1a;阿秀 校招八股文学习网站&#xff1a;https://interviewguide.cn 这是阿秀的第「257」篇原创 小伙伴们大家好&#xff0c;我是阿秀。 欢迎今年参加秋招的小伙伴加入阿秀的学习圈&#xff0c;目前已经超过 2200 小伙伴加入&#xff01;去年认真准备和走下来的基…

GreenPlum (一) 初识

在开始了解GreenPlum之前&#xff0c;应该对这种产品的诞生有基本的了解&#xff0c;搭建一个基本的知识框架。对以下历史有基本了解之后应对下文术语进行基本阅读。 ​ 阅读目标: 阅读完成后需要对相关术语以及greenplum有基础理解。 文案基本互联网相关blog进行整体汇总&…

苹果跌倒检测新专利获得,结合苹果Find My可准确定位

苹果首款“跌倒检测”功能专利可追溯到 2018 年公示的 20190103007&#xff0c;后续又获得了至少 5 项相关专利。根据美国商标和专利局&#xff08;USPTO&#xff09;上周四公示的专利&#xff0c;苹果公司再次获得了一项“跌倒检测”功能专利。 苹果在报告中表示&#xff0c…