feat(ci): 优化CI/CD流程,支持feature->dev->release->main完整自动化
ci/woodpecker/manual/woodpecker Pipeline was successful
ci/woodpecker/manual/woodpecker Pipeline was successful
- 新增feature/**分支支持:Lint + TypeCheck + Unit Test + Smoke E2E - 新增dev分支支持:完整测试套件(不部署) - 优化release/**分支触发条件 - 修复归档逻辑,支持动态分支名称 - 完善测试策略分层 - 增强部署安全机制
This commit is contained in:
+55
-28
@@ -1,20 +1,36 @@
|
||||
# ============================================
|
||||
# Novalon Website - 全自动CI/CD工作流
|
||||
# ============================================
|
||||
# 发布策略:release分支发布 + main分支归档
|
||||
# 发布策略:feature -> dev -> release -> main
|
||||
#
|
||||
# 分支角色:
|
||||
# - feature分支:开发新功能
|
||||
# - release分支:生产环境代码,合并后自动部署
|
||||
# - main分支:稳定代码归档,只读
|
||||
# 分支角色与流程:
|
||||
# 1. feature/** 分支:开发新功能
|
||||
# - 触发:PR和push
|
||||
# - 执行:Lint + TypeCheck + Smoke Test
|
||||
# - 合并到:dev分支
|
||||
#
|
||||
# 2. dev 分支:开发集成
|
||||
# - 触发:push
|
||||
# - 执行:完整测试套件(不部署)
|
||||
# - 创建/合并到:release/**分支
|
||||
#
|
||||
# 3. release/** 分支:生产环境代码
|
||||
# - 触发:push
|
||||
# - 执行:完整测试 + 构建 + 部署 + 归档
|
||||
# - 部署到:生产环境(139.155.109.62)
|
||||
# - 归档到:main分支
|
||||
#
|
||||
# 4. main 分支:稳定代码归档
|
||||
# - 只读分支
|
||||
# - 仅接收来自release的自动归档
|
||||
#
|
||||
# 流水线阶段:
|
||||
# 1. 代码质量检查 (lint, type-check, security)
|
||||
# 2. 单元测试和集成测试
|
||||
# 3. E2E测试 (分层测试)
|
||||
# 4. 构建Docker镜像
|
||||
# 5. 部署到生产环境 (release分支)
|
||||
# 6. 归档到main分支
|
||||
# 4. 构建Docker镜像 (仅release分支)
|
||||
# 5. 部署到生产环境 (仅release分支)
|
||||
# 6. 归档到main分支 (仅release分支)
|
||||
# 7. 通知和监控
|
||||
# ============================================
|
||||
|
||||
@@ -27,7 +43,6 @@ variables:
|
||||
# 阶段1: 代码质量检查
|
||||
# ============================================
|
||||
steps:
|
||||
# 1.1 Lint检查
|
||||
lint:
|
||||
image: *node_image
|
||||
environment:
|
||||
@@ -39,8 +54,12 @@ steps:
|
||||
event:
|
||||
- push
|
||||
- pull_request
|
||||
branch:
|
||||
- feature/**
|
||||
- dev
|
||||
- release
|
||||
- release/**
|
||||
|
||||
# 1.2 类型检查
|
||||
type-check:
|
||||
image: *node_image
|
||||
environment:
|
||||
@@ -52,8 +71,12 @@ steps:
|
||||
event:
|
||||
- push
|
||||
- pull_request
|
||||
branch:
|
||||
- feature/**
|
||||
- dev
|
||||
- release
|
||||
- release/**
|
||||
|
||||
# 1.3 安全漏洞扫描
|
||||
security-scan:
|
||||
image: *node_image
|
||||
environment:
|
||||
@@ -65,11 +88,13 @@ steps:
|
||||
event:
|
||||
- push
|
||||
- pull_request
|
||||
branch:
|
||||
- feature/**
|
||||
- dev
|
||||
- release
|
||||
- release/**
|
||||
failure: ignore
|
||||
|
||||
# ============================================
|
||||
# 阶段2: 单元测试和集成测试
|
||||
# ============================================
|
||||
unit-tests:
|
||||
image: *node_image
|
||||
environment:
|
||||
@@ -82,11 +107,15 @@ steps:
|
||||
event:
|
||||
- push
|
||||
- pull_request
|
||||
branch:
|
||||
- feature/**
|
||||
- dev
|
||||
- release
|
||||
- release/**
|
||||
|
||||
# ============================================
|
||||
# 阶段3: E2E测试 (分层测试)
|
||||
# ============================================
|
||||
# 3.1 Smoke测试 (PR快速验证)
|
||||
e2e-smoke:
|
||||
image: mcr.microsoft.com/playwright:v1.48.0-jammy
|
||||
environment:
|
||||
@@ -99,9 +128,11 @@ steps:
|
||||
- npm run test:smoke
|
||||
when:
|
||||
event:
|
||||
- push
|
||||
- pull_request
|
||||
branch:
|
||||
- feature/**
|
||||
|
||||
# 3.2 标准测试 (release分支)
|
||||
e2e-standard:
|
||||
image: mcr.microsoft.com/playwright:v1.48.0-jammy
|
||||
environment:
|
||||
@@ -116,10 +147,10 @@ steps:
|
||||
event:
|
||||
- push
|
||||
branch:
|
||||
- dev
|
||||
- release
|
||||
- release/**
|
||||
|
||||
# 3.3 深度测试 (release分支)
|
||||
e2e-deep:
|
||||
image: mcr.microsoft.com/playwright:v1.48.0-jammy
|
||||
environment:
|
||||
@@ -137,7 +168,6 @@ steps:
|
||||
- release
|
||||
- release/**
|
||||
|
||||
# 3.4 性能测试 (release分支)
|
||||
e2e-performance:
|
||||
image: mcr.microsoft.com/playwright:v1.48.0-jammy
|
||||
environment:
|
||||
@@ -155,7 +185,6 @@ steps:
|
||||
- release
|
||||
- release/**
|
||||
|
||||
# 3.5 可访问性测试 (release分支)
|
||||
e2e-accessibility:
|
||||
image: mcr.microsoft.com/playwright:v1.48.0-jammy
|
||||
environment:
|
||||
@@ -173,7 +202,6 @@ steps:
|
||||
- release
|
||||
- release/**
|
||||
|
||||
# 3.6 视觉回归测试 (release分支)
|
||||
e2e-visual:
|
||||
image: mcr.microsoft.com/playwright:v1.48.0-jammy
|
||||
environment:
|
||||
@@ -336,22 +364,21 @@ steps:
|
||||
git config --global user.email "ci@novalon.cn"
|
||||
git config --global user.name "Woodpecker CI"
|
||||
|
||||
# 使用SSH而不是HTTPS+Token
|
||||
git remote set-url origin git@git.f.novalon.cn:novalon/novalon-website.git
|
||||
|
||||
# 拉取最新代码
|
||||
git fetch origin
|
||||
|
||||
CURRENT_BRANCH="${CI_COMMIT_BRANCH}"
|
||||
echo "Current branch: $CURRENT_BRANCH"
|
||||
|
||||
git checkout main
|
||||
git pull origin main
|
||||
|
||||
# 合并release分支
|
||||
git merge release --no-ff -m "chore: 归档release ${CI_COMMIT_SHA:0:7}"
|
||||
git merge "$CURRENT_BRANCH" --no-ff -m "chore: 归档${CURRENT_BRANCH} ${CI_COMMIT_SHA:0:7}"
|
||||
|
||||
# 创建版本标签
|
||||
VERSION_TAG="v$(date +%Y.%m.%d)-${CI_COMMIT_SHA:0:7}"
|
||||
git tag -a "$VERSION_TAG" -m "Release $(date +%Y-%m-%d)"
|
||||
git tag -a "$VERSION_TAG" -m "Release $(date +%Y-%m-%d) from ${CURRENT_BRANCH}"
|
||||
|
||||
# 推送到远程(带重试)
|
||||
for i in {1..3}; do
|
||||
if git push origin main && git push origin --tags; then
|
||||
echo "✅ Archive succeeded! Version: $VERSION_TAG"
|
||||
@@ -363,7 +390,7 @@ steps:
|
||||
|
||||
echo "⚠️ Archive failed, but deployment succeeded"
|
||||
echo "Manual archive may be needed"
|
||||
exit 0 # 不阻止部署成功
|
||||
exit 0
|
||||
when:
|
||||
event:
|
||||
- push
|
||||
|
||||
Reference in New Issue
Block a user