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