Files
xiaoxia def6ee2363
CI/CD Pipeline / Validate Code Quality And Tests (push) Successful in 46s
CI/CD Pipeline / Unit Tests (push) Successful in 1m40s
CI/CD Pipeline / Frontend Lint (push) Successful in 2m52s
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Integration Tests (push) Successful in 1m42s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Successful in 16m34s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 2m52s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m55s
feat(ci): 新增发布与灰度部署脚本
合并PR #316:新增release.sh / gray_deploy.sh / rollback_gray.sh三个脚本,适配生产环境架构(nginx upstream权重 + canary容器)
2026-07-14 13:12:41 +08:00

114 lines
3.0 KiB
Bash
Executable File
Raw Permalink 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.
#!/bin/bash
# 一键发布脚本:打 tag → 触发 CI 构建 → 可选灰度发布
# 用法: ./scripts/release.sh v0.1.130 [--gray 5]
#
# 说明:
# - 打 tag 后 CI 会自动构建镜像并全量部署到生产
# - 加 --gray 参数则在构建完成后执行灰度切流(需 SSH 到生产服务器执行)
# - 加 --no-deploy 只打 tag 不触发自动部署
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
usage() {
echo "用法: $0 <版本号> [--gray 百分比] [--no-deploy]"
echo ""
echo "示例:"
echo " $0 v0.1.130 # 打tag + 全量发布(CI自动部署)"
echo " $0 v0.1.130 --gray 5 # 打tag + 5%灰度发布"
echo " $0 v0.1.130 --no-deploy # 只打tag,不部署"
exit 1
}
VERSION=""
GRAY_PCT=0
DEPLOY=true
while [[ $# -gt 0 ]]; do
case "$1" in
--gray)
GRAY_PCT="$2"
shift 2
;;
--no-deploy)
DEPLOY=false
shift
;;
-h|--help)
usage
;;
v*)
VERSION="$1"
shift
;;
*)
echo "未知参数: $1"
usage
;;
esac
done
if [[ -z "$VERSION" ]]; then
echo "错误: 请指定版本号(如 v0.1.130"
usage
fi
echo "============================================"
echo " 发布版本: $VERSION"
echo " 灰度比例: ${GRAY_PCT}%"
echo " 自动部署: $DEPLOY"
echo "============================================"
cd "$REPO_ROOT"
# 1. 确认分支
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [[ "$CURRENT_BRANCH" != "develop" ]]; then
echo "错误: 请在 develop 分支上打 tag"
exit 1
fi
# 2. 拉取最新
echo ""
echo ">>> 拉取最新代码..."
git pull origin develop
# 3. 检查 tag 是否已存在
if git rev-parse "$VERSION" >/dev/null 2>&1; then
echo "警告: tag $VERSION 已存在,跳过打 tag"
else
echo ""
echo ">>> 打 tag $VERSION ..."
git tag -a "$VERSION" -m "Release $VERSION"
git push origin "$VERSION"
echo " ✅ Tag 已推送,CI 将自动构建生产镜像"
fi
# 4. 部署提示
if [[ "$DEPLOY" == "true" ]]; then
echo ""
echo ">>> 构建 & 部署"
echo " CI 会自动执行:"
echo " 1. Build Production Runtime Images(约10-15分钟)"
echo " 2. Deploy ProductionSSH 到生产服务器部署)"
echo ""
echo " 查看进度: Gitea Actions → 对应 tag 的 run"
if [[ "$GRAY_PCT" -gt 0 ]]; then
echo ""
echo ">>> 灰度发布"
echo " 构建部署完成后,在生产服务器上执行:"
echo " cd /var/lib/xiaoxia-saas-production"
echo " ./gray_deploy.sh $VERSION $GRAY_PCT"
fi
fi
echo ""
echo "============================================"
echo " ✅ 发布流程触发完成"
echo " 版本: $VERSION"
echo " 灰度: ${GRAY_PCT}%"
echo "============================================"