From deaae8c4e60fa739cc35ae87956a4b9818842357 Mon Sep 17 00:00:00 2001 From: clkj <919284064@qq.com> Date: Tue, 16 Jun 2026 17:01:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20.gitea/workflows/promote.y?= =?UTF-8?q?aml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/promote.yaml | 71 +++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .gitea/workflows/promote.yaml diff --git a/.gitea/workflows/promote.yaml b/.gitea/workflows/promote.yaml new file mode 100644 index 0000000..75037d8 --- /dev/null +++ b/.gitea/workflows/promote.yaml @@ -0,0 +1,71 @@ +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