Archived
Merge pull request 'v10' (#10) from jacky-patch-6 into main
Reviewed-on: http://117.72.28.96:8765/Jacky/Hulumath-Web-Demo/pulls/10
This commit was merged in pull request #10.
This commit is contained in:
@@ -1,13 +1,17 @@
|
|||||||
name: PR合并自动部署
|
name: PR合并自动部署
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main]
|
branches:
|
||||||
types: [closed]
|
- main
|
||||||
|
types:
|
||||||
|
- closed
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
if: github.event.pull_request.merged == true
|
if: github.event.pull_request.merged == true
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 配置SSH环境
|
- name: 配置SSH环境
|
||||||
run: |
|
run: |
|
||||||
@@ -18,36 +22,161 @@ jobs:
|
|||||||
|
|
||||||
- name: 远程执行部署
|
- name: 远程执行部署
|
||||||
run: |
|
run: |
|
||||||
ssh -i ~/.ssh/deploy_key ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} <<EOF
|
ssh -T -i ~/.ssh/deploy_key \
|
||||||
set -e
|
${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} <<'EOF'
|
||||||
cd ${{ env.DEPLOY_PATH }}
|
|
||||||
git fetch origin main
|
|
||||||
|
|
||||||
# 备份运行时db
|
set -e
|
||||||
if [ -f data/miniapp_v3.db ]; then
|
|
||||||
cp data/miniapp_v3.db data/miniapp_v3.db.tmp
|
# ==============================
|
||||||
|
# 项目目录
|
||||||
|
# ==============================
|
||||||
|
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
|
fi
|
||||||
|
else
|
||||||
|
echo "ℹ️ 仓库包含数据库更新,不恢复旧数据库"
|
||||||
|
fi
|
||||||
|
|
||||||
git checkout origin/main -- .
|
rm -f "$DB_BACKUP"
|
||||||
|
|
||||||
CHANGED=\$(git diff --name-only HEAD FETCH_HEAD | grep "data/miniapp_v3.db" || true)
|
# ==============================
|
||||||
if [ -z "\$CHANGED" ]; then
|
# 安装 Python 依赖
|
||||||
if [ -f data/miniapp_v3.db.tmp ]; then
|
# ==============================
|
||||||
cp data/miniapp_v3.db.tmp data/miniapp_v3.db
|
echo "📦 安装 Python 依赖..."
|
||||||
fi
|
|
||||||
fi
|
|
||||||
rm -f data/miniapp_v3.db.tmp
|
|
||||||
|
|
||||||
/www/server/pyporject_evn/versions/3.12.13/bin/pip install -r requirements.txt
|
/www/server/pyporject_evn/versions/3.12.13/bin/pip \
|
||||||
chown -R www:www .
|
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,优雅重载完成"
|
||||||
|
|
||||||
# 获取gunicorn master进程,发送HUP优雅重载
|
|
||||||
MASTER_PID=\$(pgrep -f "gunicorn_conf.py" -P 1)
|
|
||||||
echo "Detected gunicorn master PID: \$MASTER_PID"
|
|
||||||
if [ -n "\$MASTER_PID" ]; then
|
|
||||||
kill -HUP "\$MASTER_PID"
|
|
||||||
echo "✅ Graceful reload signal sent"
|
|
||||||
else
|
else
|
||||||
echo "⚠️ Gunicorn master not found, skip reload"
|
|
||||||
|
echo "⚠️ gunicorn.pid 中的进程不存在"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
EOF
|
|
||||||
|
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
|
||||||
Reference in New Issue
Block a user