利用脚本将代码部署到测试环境(.sh)

1.将上次的部署文件备份名为xxx_bak

2.首次需要输入环境密码

3.并生成一个zip的压缩包,方便部署到线上环境

4.在终端 输入./update.sh 则可执行

文件名update.sh,放在package.json文件同级

# @example: 1. ./update.sh 2. 输入服务器密码 【 如果不想每次都输入密码可以先生成密钥对,在复制到远程服务器中,终端执行操作 1. ssh-keygen -t rsa 2. ssh-copy-id [email protected] 】
# 设置变量 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 失败!"

你可能感兴趣的:(前端)