前端釋出shell指令碼

timseng發表於2024-10-22

將“切換目錄、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

相關文章