前端发布shell脚本

将“切换目录、npm构建、tar打包、scp传输到服务器、服务器端解压、服务器端文件解压替换、服务器端服务重启”流程,整合成一个shell脚本

#!/bin/bash  
###  
 # @Description: 前端自动发布脚本  
 # @FilePath: publish.sh  
###  
  
# 获取脚本所在目录  
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"  
  
# 获取脚本所在目录的上一级目录  
PARENT_DIR="$(dirname "$SCRIPT_DIR")"  
  
# 本地 tar 文件名称  
LOCAL_TAR_FILE="dist.tar"  
  
# 远程服务器信息  
REMOTE_USER="root"                  # 远程服务器用户  
REMOTE_HOST=""                      # 远程服务器 IP
REMOTE_PORT="22"                    # 远程服务器 ssh 端口  
REMOTE_PASSWORD="$1"                # 远程服务器密码  
REMOTE_DIR="/usr/frontend/"         # 远程服务器文件传输目录  
  
# todo 添加执行参数检查于确认
# 检查打包命令是否成功的函数 check_success() {
if [ $? -ne 0 ]; then echo "错误: $1" exit 1 fi } # 检查 sshpass 是否存在 USE_SSHPASS=false if command -v sshpass > /dev/null 2>&1; then if [ -z "$REMOTE_PASSWORD" ]; then echo "警告: 检测到 sshpass,但未提供密码。将使用常规方式登录。" else USE_SSHPASS=true fi else echo "未检测到 sshpass,使用常规的密码提示方式。" fi # 开始打包 echo "开始打包..." npm run build > /dev/null 2>&1 check_success "前端打包失败" # 删除旧的 tar 文件 rm -f $LOCAL_TAR_FILE > /dev/null 2>&1 # 生成新的 tar 文件 tar -cvf $LOCAL_TAR_FILE dist > /dev/null 2>&1 check_success "打包 dist 目录失败" # 传输文件到服务器 echo "正在将文件传输到服务器..." if [ "$USE_SSHPASS" = true ]; then sshpass -p "$REMOTE_PASSWORD" scp -P $REMOTE_PORT $LOCAL_TAR_FILE $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR else scp -P $REMOTE_PORT $LOCAL_TAR_FILE $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR fi check_success "SCP 文件传输失败" # 定义在远程服务器上执行的脚本内容 REMOTE_SCRIPT=$(cat << EOF #!/bin/bash cd $REMOTE_DIR if [ ! -e "$LOCAL_TAR_FILE" ]; then echo "$LOCAL_TAR_FILE 不存在" exit 1 fi tar -xvf $LOCAL_TAR_FILE > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "错误: $LOCAL_TAR_FILE 解压失败" exit 1 fi rm -rf html mv dist html # docker restart frontend_web EOF ) # 登录服务器并执行脚本 echo "文件传输完成,正在登录服务器并执行脚本..." if [ "$USE_SSHPASS" = true ]; then sshpass -p "$REMOTE_PASSWORD" ssh -p "$REMOTE_PORT" "$REMOTE_USER@$REMOTE_HOST" "bash -s" <<EOF $REMOTE_SCRIPT EOF else ssh -p "$REMOTE_PORT" "$REMOTE_USER@$REMOTE_HOST" "bash -s" <<EOF $REMOTE_SCRIPT EOF fi check_success "远程脚本执行失败" cd - > /dev/null 2>&1 || exit echo "脚本执行完毕!"

命令行使用方式:

sh publish.sh ssh-password

 

posted @ 2024-10-22 10:13  timseng  阅读(12)  评论(0编辑  收藏  举报