# Woodpecker CI配置说明 ## 概述 本项目使用Woodpecker CI作为持续集成/持续部署(CI/CD)工具。Woodpecker CI是一个轻量级、可扩展的CI/CD平台,支持Docker容器化部署。 ## 配置文件 Woodpecker CI配置文件位于项目根目录:`.woodpecker.yml` ## Pipeline结构 ### 主要Pipeline #### 1. Setup Pipeline - **作用**:初始化Docker环境 - **镜像**:`docker:dind` - **触发条件**:推送到main/develop分支、PR、标签 #### 2. E2E Tests Pipeline - **作用**:执行端到端测试 - **镜像**:`node:18` - **并行执行**:4个分片 - **触发条件**:推送到main/develop分支、PR、标签 - **依赖**:setup #### 3. API Tests Pipeline - **作用**:执行API集成测试 - **镜像**:`node:18` - **触发条件**:推送到main/develop分支、PR、标签 - **依赖**:setup #### 4. Test Report Pipeline - **作用**:合并测试报告 - **镜像**:`node:18` - **触发条件**:测试完成后(成功或失败) - **依赖**:e2e-tests, api-tests #### 5. Notify Failure Pipeline - **作用**:测试失败时发送Slack通知 - **镜像**:`plugins/slack` - **触发条件**:测试失败 - **依赖**:e2e-tests, api-tests #### 6. Nightly Tests Pipeline - **作用**:每日定时执行完整测试 - **镜像**:`node:18` - **触发条件**:每天凌晨2点(cron: "0 2 * * *") - **依赖**:setup ## 环境变量配置 在Woodpecker CI管理界面配置以下环境变量: ### 必需变量 | 变量名 | 描述 | 示例 | |--------|------|------| | `ADMIN_BASE_URL` | Admin模块URL | `http://localhost:5174` | | `UNIAPP_BASE_URL` | Uniapp模块URL | `http://localhost:8081` | | `API_BASE_URL` | 后端API URL | `http://localhost:8080` | | `TEST_USERNAME` | 测试账号用户名 | `admin` | | `TEST_PASSWORD` | 测试账号密码 | `admin123` | ### 可选变量 | 变量名 | 描述 | 示例 | |--------|------|------| | `SLACK_WEBHOOK` | Slack通知Webhook URL | `https://hooks.slack.com/...` | | `MOCK_ENABLED` | 是否启用Mock | `false` | | `TEST_TIMEOUT` | 测试超时时间(ms) | `30000` | ## 触发条件 ### 自动触发 - **Push事件**:代码推送到main或develop分支 - **Pull Request事件**:创建或更新PR - **Tag事件**:创建新的标签 - **定时任务**:每天凌晨2点执行完整测试 ### 手动触发 在Woodpecker CI界面中,可以手动触发任何Pipeline。 ## 测试执行流程 ### E2E测试流程 1. **Setup阶段**:初始化Docker环境 2. **安装依赖**:安装npm依赖和Playwright浏览器 3. **启动服务**:使用docker-compose启动测试环境 4. **执行测试**:并行运行E2E测试(4个分片) 5. **清理环境**:停止并清理Docker容器 6. **生成报告**:合并测试报告并生成HTML报告 ### API测试流程 1. **Setup阶段**:初始化Docker环境 2. **安装依赖**:安装npm依赖 3. **启动服务**:仅启动后端服务 4. **执行测试**:运行API集成测试 5. **清理环境**:停止并清理Docker容器 ## 并行执行 Woodpecker CI支持并行执行测试以提高效率: - **E2E测试**:4个并行分片(CI_NODE_INDEX: 1-4) - **API测试**:独立执行 ## 测试报告 ### 报告生成 测试完成后会自动生成以下报告: - **HTML报告**:交互式HTML报告 - **JSON报告**:机器可读的JSON格式 - **JUnit报告**:兼容JUnit的XML格式 ### 报告位置 - `playwright-report/`:HTML报告 - `test-results/results.json`:JSON报告 - `test-results/junit.xml`:JUnit报告 ### 查看报告 在Woodpecker CI界面中,可以: 1. 查看Pipeline执行日志 2. 下载测试报告artifacts 3. 查看测试截图和录屏 ## 通知配置 ### Slack通知 当测试失败时,会自动发送Slack通知: 1. 在Woodpecker CI中配置`SLACK_WEBHOOK`环境变量 2. 通知会发送到指定的Slack频道 3. 通知内容包括: - 失败的Pipeline名称 - 失败的原因 - 相关的commit信息 ### 其他通知方式 Woodpecker CI支持多种通知插件: - Email - Discord - Rocket.Chat - Matrix - Telegram ## 故障排查 ### 常见问题 #### 1. Docker权限问题 **错误信息**:`permission denied while trying to connect to the Docker daemon socket` **解决方案**: ```yaml services: docker: image: docker:dind privileged: true volumes: - /var/run/docker.sock:/var/run/docker.sock ``` #### 2. 测试超时 **错误信息**:`Test timeout of 30000ms exceeded` **解决方案**: 在`.woodpecker.yml`中增加超时时间: ```yaml environment: - TEST_TIMEOUT=60000 ``` #### 3. 依赖安装失败 **错误信息**:`npm install failed` **解决方案**: ```yaml commands: - npm ci --prefer-offline --no-audit ``` #### 4. 服务启动失败 **错误信息**:`Service failed to start` **解决方案**: ```yaml commands: - docker-compose -f ../docker-compose.test.yml up -d - sleep 60 # 增加等待时间 - docker-compose -f ../docker-compose.test.yml ps # 检查服务状态 ``` ### 调试技巧 #### 1. 查看详细日志 在Woodpecker CI界面中: 1. 点击失败的Pipeline 2. 查看详细的执行日志 3. 下载完整的日志文件 #### 2. 本地复现 ```bash # 使用相同的命令在本地执行 cd everything-is-suitable-test npm ci docker-compose -f ../docker-compose.test.yml up -d npx playwright test ``` #### 3. 启用调试模式 在`.woodpecker.yml`中添加: ```yaml environment: - DEBUG=* - PWDEBUG=1 ``` ## 最佳实践 ### 1. Pipeline设计 - **模块化**:将不同类型的测试分离到独立的Pipeline - **并行化**:充分利用并行执行提高效率 - **依赖管理**:明确Pipeline之间的依赖关系 ### 2. 资源优化 - **缓存依赖**:使用npm缓存加速依赖安装 - **重用容器**:在可能的情况下重用Docker容器 - **清理资源**:测试完成后及时清理资源 ### 3. 安全性 - **敏感信息**:使用环境变量存储敏感信息 - **最小权限**:仅授予必要的权限 - **定期更新**:及时更新镜像和依赖 ### 4. 监控和告警 - **实时监控**:监控Pipeline执行状态 - **及时通知**:配置适当的通知机制 - **定期审查**:定期审查Pipeline执行日志 ## 扩展和定制 ### 添加新的Pipeline 在`.woodpecker.yml`中添加新的Pipeline: ```yaml new-pipeline: image: node:18 commands: - echo "执行新的测试" when: event: [push] branch: [main] ``` ### 使用自定义镜像 ```yaml custom-test: image: your-registry/custom-image:latest commands: - echo "使用自定义镜像" ``` ### 集成其他工具 Woodpecker CI支持丰富的插件生态: - **代码质量**:SonarQube, CodeClimate - **部署**:Kubernetes, AWS, GCP - **通知**:Slack, Email, Discord - **安全扫描**:Trivy, Snyk ## 相关资源 - [Woodpecker CI官方文档](https://woodpecker-ci.org/docs/) - [Woodpecker CI插件市场](https://woodpecker-ci.org/plugins/) - [Playwright CI/CD集成](https://playwright.dev/docs/ci) - [Docker Compose文档](https://docs.docker.com/compose/) ## 联系方式 如有问题或建议,请联系DevOps团队。