半自动化部署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 "部署完成。"

浙公网安备 33010602011771号