72 lines
3.4 KiB
YAML
72 lines
3.4 KiB
YAML
name: 🚀 灰度版本转正全量 (Promote to Production)
|
|
|
|
# 【核心】配置为手动触发按钮
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
promote-to-stable:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: 🛡️ 安装远程连接依赖
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install -y openssh-client sshpass
|
|
- name: 🔄 远程连接主节点执行转正
|
|
env:
|
|
SSH_PWD: ${{ secrets.SSH_PWD }} # 确保你在 Gitea 仓库的 Secrets 中配置了这些变量
|
|
SSH_USER: ${{ secrets.SSH_USER }}
|
|
SSH_HOST: ${{ secrets.SSH_HOST }}
|
|
run: |
|
|
sshpass -p "${SSH_PWD}" ssh -o StrictHostKeyChecking=no -p 22 ${SSH_USER}@${SSH_HOST} << 'EOF'
|
|
set -e
|
|
echo "==================== 开始灰度版本转正全量流程 ===================="
|
|
|
|
# 1. 获取当前灰度版(Canary)正在运行的真实镜像标签
|
|
CANARY_IMAGE=$(kubectl get deployment nextjs-app-canary -o jsonpath='{.spec.template.spec.containers.image}' 2>/dev/null || true)
|
|
|
|
if [ -z "${CANARY_IMAGE}" ] || [[ "${CANARY_IMAGE}" == *"latest"* ]]; then
|
|
echo "【警告】未检测到带有具体 SHA 标签的灰度版本,或灰度版未启动!"
|
|
echo "无法安全获取当前测试通过的版本号,终止转正。"
|
|
exit 1
|
|
fi
|
|
echo "🔥 成功捕获待转正的灰度版镜像: ${CANARY_IMAGE}"
|
|
|
|
# 2. SQLite 数据库安全同步
|
|
echo "📦 正在进行数据库热备与同步..."
|
|
BACKUP_DIR="/home/ai/k3s/data/nextjs/db/backup"
|
|
mkdir -p ${BACKUP_DIR}
|
|
|
|
# 如果原生产数据库存在,则进行备份
|
|
if [ -f "/home/ai/k3s/data/nextjs/db/dev.db" ]; then
|
|
cp /home/ai/k3s/data/nextjs/db/dev.db ${BACKUP_DIR}/dev.db.bak.$(date +%Y%m%d_%H%M%S)
|
|
fi
|
|
|
|
# 将测试通过的灰度数据库同步至生产环境
|
|
if [ -f "/home/ai/k3s/data/nextjs/canary-db/dev.db" ]; then
|
|
cp /home/ai/k3s/data/nextjs/canary-db/dev.db /home/ai/k3s/data/nextjs/db/dev.db
|
|
echo "✅ 数据库同步成功"
|
|
else
|
|
echo "⚠️ 未找到灰度数据库文件,跳过数据同步"
|
|
fi
|
|
|
|
# 3. 应用稳定版基础架构定义(确保基础设施存在)
|
|
echo "🧱 应用稳定版基础资源配置..."
|
|
kubectl apply -f /home/ai/k3s/nextjs-stable-promote.yaml
|
|
|
|
# 4. 将稳定版的镜像提升为灰度版的镜像版本
|
|
echo "🚀 开始将稳定版滚动升级至: ${CANARY_IMAGE}"
|
|
kubectl set image deployment/nextjs-app-stable nextjs=${CANARY_IMAGE}
|
|
|
|
# 5. 监控生产环境滚动更新状态
|
|
echo "⏳ 等待全量生产环境滚动更新完成..."
|
|
if kubectl rollout status deployment/nextjs-app-stable --timeout=90s; then
|
|
echo "========================================================="
|
|
echo " 🎉【转正成功】全量版本已无缝升级至灰度同等版本!"
|
|
echo "========================================================="
|
|
else
|
|
echo "❌【严重错误】生产环境升级超时,正在尝试自动回滚..."
|
|
kubectl rollout undo deployment/nextjs-app-stable
|
|
exit 1
|
|
fi
|
|
EOF
|