diff --git a/.woodpecker.yml b/.woodpecker.yml index fcdfab1..6e96801 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -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