释放双手之一键发布前端应用🎉🎉🎉

184 阅读1分钟

前端项目打包发布脚本

  1. 构建成功后自动压缩带日期的压缩包 package20230720
  2. 上传 build 包到服务器
  3. 在服务器上备份上次的包命名为 name_bak
  4. 首次输入服务器密码后续执行脚本无需输入密码
# @Author:       ycwei
# @Date:         2023-04-27 09:19:03
# @LastEditors:  ycwei
# @LastEditTime: 2023-07-20 08:37:03
# @example:      ./update.sh
# 设置变量 LOCAL_DIR - 当前目录,USER - 服务器用户名,SERVER - 服务器地址,REMOTE_DIR - 需要存放的服务器目录,FILE_NAME - 文件名称,ZIP_NAME - 生成压缩包名称
LOCAL_DIR=$(pwd)
USER="root"
SERVER="192.168.0.140"
REMOTE_DIR="/opt/weicx/webapps"
FILE_NAME="workCenter"
ZIP_NAME="$FILE_NAME$(date +'%Y%m%d').zip"

# 打包前端项目
npm run build

# 区分 Windows 和 Mac 进行压缩
function ZIP() { [[ "$OSTYPE" == "darwin"* ]] && { zip -r "$ZIP_NAME" "$(basename "$FILE_NAME")";} || { powershell -c "Compress-Archive -Path "$FILE_NAME" -DestinationPath "$ZIP_NAME" -Force"; } }

# 本地不存在就生成 SSH 密钥对
[ ! -f ~/.ssh/id_rsa ] && { ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa; } || { echo "已存在公钥!"; }    

# 如果未添加就将公钥复制到服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub $USER@$SERVER 2>/dev/null

# 将文件压缩、检查打包是否成功
[ $? -eq 0 ] && { ZIP; echo "压缩 $FILE_NAME 成功!"; } || { echo "打包 $FILE_NAME 失败!"; exit 1; }

# 打印当前目录
echo "当前目录为:$LOCAL_DIR"

# 备份并删除服务器中原有包
ssh $USER@$SERVER "cd $REMOTE_DIR && rm -rf $FILE_NAME'_bak' && [ -d $FILE_NAME ] && { cp -r $FILE_NAME $FILE_NAME'_bak'; echo "备份成功!"; } || { echo "备份文件不存在!"; } && rm -rf $FILE_NAME" 

# 使用 SCP 命令将文件上传到远程服务器
scp -r ./$FILE_NAME $USER@$SERVER:$REMOTE_DIR

# 检查 SCP 命令是否成功执行
[ $? -eq 0 ] && echo "上传文件 $FILE_NAME 成功!" || echo "上传文件 $FILE_NAME 失败!"