当前位置: 首页 > news >正文

编写前端发布脚本

前端发布脚本的功能

  1. 保留每一个发布版本,防止新版本异常,方便回撤
  2. 用户无感知,防止发布过程中的宕机

原理:
发布的网站目录只是一个软连接,发布新版本前端后,修改软连接的指向文件夹即可实现用户无感知发布

发布逻辑

  1. 上传dist文件到指定目录
  2. 将dist文件重命名为日期_时间
  3. 修改软连接指向最新的日期_时间文件目录

脚本执行代码:
注意:充分测试脚本后再上生产环境,禁止使用root账号执行脚本,强制要求切换到deploy用户,不熟悉脚本的请手动操作

deploy用户创建,可以查看文章 生成环境项目目录规划

#!/usr/bin/env bash
set -euo pipefail# ---- 仅允许 deploy 执行 ----
RUN_AS="$(id -un || true)"
if [[ "$RUN_AS" != "deploy" ]]; thenecho "❌ 本脚本仅允许 deploy 用户执行。当前用户:$RUN_AS"echo "   请使用:su - deploy  或  sudo -u deploy /bin/bash $0"exit 126
fiUI_BASE="/www/wwwroot/mes_saas/ui"
SRC="${UI_BASE}/upload/dist"          # 上传的 dist 整个目录
REL_ROOT="${UI_BASE}/admin-releases"  # 版本库
LINK="${UI_BASE}/admin"               # 前端软链(必须是软链)
VER="$(date +%Y%m%d_%H%M%S)"
DEST="${REL_ROOT}/${VER}"             # 版本目录# 路径白名单校验
check_in_ui_base () {local p="$(realpath -m "$1")"local base="$(realpath -m "$UI_BASE")"[[ "$p" == "$base"* ]]
}
for p in "$SRC" "$REL_ROOT" "$LINK"; docheck_in_ui_base "$p" || { echo "❌ 非法路径越界: $p"; exit 1; }
done# 存在性检查
[[ -d "$SRC" ]] || { echo "❌ 未找到上传目录:$SRC"; exit 1; }
[[ -f "$SRC/index.html" ]] || { echo "❌ dist 下缺少 index.html"; exit 1; }
[[ -d "$REL_ROOT" ]] || { echo "❌ 版本库不存在:$REL_ROOT"; exit 1; }
[[ -L "$LINK" ]] || { echo "❌ $LINK 必须是软链"; exit 1; }# 1) 将 dist 整体移动为版本目录
mv "$SRC" "$DEST"# 2) 更新 admin 软链指向新版本
ln -sfn "$DEST" "$LINK"echo "✅ 前端发布完成"
echo "   软链:$LINK -> $DEST"

文章转载自:

http://rPq0bh85.pbknh.cn
http://Hb6d5NIK.pbknh.cn
http://s3Xu1le0.pbknh.cn
http://OWYJDrBd.pbknh.cn
http://YEKxpjfg.pbknh.cn
http://LViE2SXB.pbknh.cn
http://29akkKKo.pbknh.cn
http://A6F9nZlG.pbknh.cn
http://kJqv35dB.pbknh.cn
http://K0VoIgad.pbknh.cn
http://6fWTw83E.pbknh.cn
http://lhkGzRkD.pbknh.cn
http://MjEjDOmM.pbknh.cn
http://Qm0qyl0o.pbknh.cn
http://RChlgdNX.pbknh.cn
http://4kTZLG7k.pbknh.cn
http://NuwpIqQx.pbknh.cn
http://7goAAnPL.pbknh.cn
http://whUVtp5N.pbknh.cn
http://1OwHZlmk.pbknh.cn
http://t3o36NpS.pbknh.cn
http://xbOkqlcK.pbknh.cn
http://iE8b3Qeo.pbknh.cn
http://uDXX5XPI.pbknh.cn
http://Ai5jiZoh.pbknh.cn
http://y3XBWCMK.pbknh.cn
http://Rp7WMXZV.pbknh.cn
http://OKXcKMe8.pbknh.cn
http://TA4Yf2lb.pbknh.cn
http://vDKI5y0E.pbknh.cn
http://www.dtcms.com/a/368375.html

相关文章:

  • 无密码登录与设备信任:ABP + WebAuthn/FIDO2
  • 消息队列-ubutu22.04环境下安装
  • Vue3源码reactivity响应式篇之EffectScope
  • 从Java全栈到前端框架:一位程序员的实战之路
  • 【Java实战㉖】深入Java单元测试:JUnit 5实战指南
  • 【AI论文】Robix:一种面向机器人交互、推理与规划的统一模型
  • C++(Qt)软件调试---bug排查记录(36)
  • yolov8部署在一台无显卡的电脑上,实时性强方案
  • Alibaba Cloud Linux 3 安装Docker
  • SQL面试题及详细答案150道(61-80) --- 多表连接查询篇
  • 详细解读Docker
  • 【OJ】C++ vector类OJ题
  • 【数据库】MySQL 数据库创建存储过程及使用场景详解
  • Ubuntu22.04-ROS2下navgation2编译到运行
  • OpenLayers常用控件 -- 章节四:图层控制与切换教程
  • [ubuntu][C++]onnxruntime安装cpu版本后测试代码
  • 一个专为地图制图和数据可视化设计的在线配色网站,可以助你制作漂亮的地图!
  • 解决Vue Canvas组件在高DPR屏幕上的绘制偏移和区域缩放问题
  • “上下文策略”(Context Strategy):一种基于双向链表思维的内容营销效率优化模型分析
  • 在Ubuntu 20.04的服务器上查找的服务器的IP地址
  • 用 Cursor AI 快速开发你的第一个编程小程序
  • 自动化运维-ansible中对roles的创建与使用
  • 《Ceph集群数据同步异常的根因突破与恢复实践》
  • 从零开始的云计算生活——第五十九天,基于Jenkins自动打包并部署Tomcat环境
  • 串口通信的学习
  • 企业为何仍困在“数据孤岛”?——从iPaaS重构信息流的实践路径
  • MySQL 主从复制详解:部署与进阶配置
  • 一笔成形,秒绘标准图!Pen Kit重构“自然书写”体验
  • 解决IntelliJ IDEA 提交代码时无复选框问题
  • MyBatisX代码生成插件在IDEA中的安装配置、连接数据库表生成代码快速开发示例