This repository has been archived on 2026-08-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Hulumath-Web-Demo/.gitea/workflows/deploy-on-merge.yml
T
Jacky 10390fee42
PR合并自动部署 / deploy (pull_request) Successful in 2s
v10
2026-08-08 17:36:26 +08:00

182 lines
5.1 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: PR合并自动部署
on:
pull_request:
branches:
- main
types:
- closed
jobs:
deploy:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- name: 配置SSH环境
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts
- name: 远程执行部署
run: |
ssh -T -i ~/.ssh/deploy_key \
${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} <<'EOF'
set -e
# ==============================
# 项目目录
# ==============================
PROJECT="/www/wwwroot/Hulumath-Web-Demo"
echo "========================================"
echo "🚀 开始部署"
echo "项目目录: $PROJECT"
echo "========================================"
cd "$PROJECT"
echo "当前目录:"
pwd
# 防止 Git 因目录所有者不同而报 dubious ownership
git config --global --add safe.directory "$PROJECT" || true
# ==============================
# 检查 Git 仓库
# ==============================
if [ ! -d ".git" ]; then
echo "❌ 当前目录不是 Git 仓库"
exit 1
fi
echo "✅ Git 仓库检查通过"
# ==============================
# 拉取远程 main
# ==============================
echo "📥 获取远程 main 分支..."
git fetch origin main
# ==============================
# 判断本次提交是否修改数据库
# ==============================
DB_CHANGED=0
if git diff --name-only HEAD origin/main | grep -qx "data/miniapp_v3.db"; then
DB_CHANGED=1
echo "⚠️ 本次代码提交包含数据库变更"
else
echo "✅ 本次代码提交未修改数据库"
fi
# ==============================
# 备份当前运行时数据库
# ==============================
DB_BACKUP="/tmp/miniapp_v3.db.deploy_backup"
rm -f "$DB_BACKUP"
if [ -f "data/miniapp_v3.db" ]; then
cp "data/miniapp_v3.db" "$DB_BACKUP"
echo "✅ 已备份当前运行时数据库"
else
echo "️ 当前不存在运行时数据库"
fi
# ==============================
# 更新代码
# ==============================
echo "🔄 更新代码到 origin/main..."
git reset --hard origin/main
echo "✅ 代码更新完成"
# ==============================
# 恢复运行时数据库
#
# 如果本次 PR 没修改数据库:
# 保留服务器当前运行时数据库
#
# 如果本次 PR 修改了数据库:
# 使用仓库中新版本数据库
# ==============================
if [ "$DB_CHANGED" -eq 0 ]; then
if [ -f "$DB_BACKUP" ]; then
cp "$DB_BACKUP" "data/miniapp_v3.db"
echo "✅ 已恢复运行时数据库"
fi
else
echo "ℹ️ 仓库包含数据库更新,不恢复旧数据库"
fi
rm -f "$DB_BACKUP"
# ==============================
# 安装 Python 依赖
# ==============================
echo "📦 安装 Python 依赖..."
/www/server/pyporject_evn/versions/3.12.13/bin/pip \
install -r requirements.txt
echo "✅ Python 依赖安装完成"
# ==============================
# 修正权限
# ==============================
chown -R www:www "$PROJECT"
# ==============================
# Gunicorn 优雅重载
# ==============================
echo "🔄 准备重载 Gunicorn..."
if [ -f "$PROJECT/gunicorn.pid" ]; then
MASTER_PID=$(cat "$PROJECT/gunicorn.pid")
echo "Gunicorn PID 文件中的进程: $MASTER_PID"
if kill -0 "$MASTER_PID" 2>/dev/null; then
kill -HUP "$MASTER_PID"
echo "✅ Gunicorn 已发送 HUP,优雅重载完成"
else
echo "⚠️ gunicorn.pid 中的进程不存在"
fi
else
# PID 文件不存在时备用查找
MASTER_PID=$(pgrep -f "gunicorn.*gunicorn_conf.py" | head -n 1 || true)
if [ -n "$MASTER_PID" ]; then
echo "检测到 Gunicorn PID: $MASTER_PID"
kill -HUP "$MASTER_PID"
echo "✅ Gunicorn 已发送 HUP,优雅重载完成"
else
echo "⚠️ 未找到 Gunicorn 进程,跳过重载"
fi
fi
echo "========================================"
echo "✅ 部署完成"
echo "========================================"
EOF