半自动化部署Go程序

完整版(附带重试机制)

#!/usr/bin/env bash
set -euo pipefail

# 变量定义
SERVICE_NAME="xxx"
SERVICE_PATH="/opt/xxx/xxx"
SERVER_IP="x.x.x.x"
SERVER_USER="${SERVER_USER:-root}"
PM2_APP_NAME="${PM2_APP_NAME:-${SERVICE_NAME}}"

# 编译项目
echo "1/5 编译..."
GOOS=linux GOARCH=amd64 go build -o "${SERVICE_NAME}"
sleep 1

# pm2 停止
echo "2/5 pm2 停止..."
ssh "${SERVER_USER}@${SERVER_IP}" "pm2 stop '${PM2_APP_NAME}' || true"
sleep 1

# 上传文件
echo "3/5 上传..."
for attempt in 1 2 3; do
  if scp "${SERVICE_NAME}" "${SERVER_USER}@${SERVER_IP}:${SERVICE_PATH}/"; then
    sleep 1
    break
  fi

  if [[ "${attempt}" -eq 3 ]]; then
    echo "scp 上传失败,已重试 3 次,部署中止。"
    exit 1
  fi

  echo "scp 上传失败,第 ${attempt} 次重试后等待 5 秒..."
  sleep 5
done

# 修改权限
echo "4/5 修改权限..."
ssh "${SERVER_USER}@${SERVER_IP}" "chmod +x '${SERVICE_PATH}/${SERVICE_NAME}'"
sleep 1

# pm2 重启
echo "5/5 pm2 重启..."
ssh "${SERVER_USER}@${SERVER_IP}" "pm2 restart '${PM2_APP_NAME}'"
sleep 1

echo "部署完成。"

简化版

#!/usr/bin/env bash
set -euo pipefail

SERVICE_NAME="xxx"
SERVICE_PATH="/opt/xxx/xxx"
SERVER_IP="x.x.x.x"
SERVER_USER="${SERVER_USER:-root}"
PM2_APP_NAME="${PM2_APP_NAME:-${SERVICE_NAME}}"

echo "1/4 编译..."
GOOS=linux GOARCH=amd64 go build -o "${SERVICE_NAME}"

echo "2/4 上传..."
scp "${SERVICE_NAME}" "${SERVER_USER}@${SERVER_IP}:${SERVICE_PATH}/"

echo "3/4 修改权限..."
ssh "${SERVER_USER}@${SERVER_IP}" "chmod +x '${SERVICE_PATH}/${SERVICE_NAME}'"

echo "4/4 pm2 重启..."
ssh "${SERVER_USER}@${SERVER_IP}" "pm2 restart '${PM2_APP_NAME}'"

echo "部署完成。"

posted @ 2026-03-03 14:00  江南烟雨梦  阅读(9)  评论(0)    收藏  举报