无题
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 课程社区 |
| 这个作业的要求在哪里 | 作业要求 |
| 我在这个课程的目标是 | 凝聚整个团队通过一定的软件开发流程,在预计时间内发布”足够好”的符合用户需求的软件,并证明其是可维护和持续发展的,并在其中做出应有的贡献,提升进行软件工程开发的能力。 |
| 这个作业在哪个具体方面帮助我实现目标 | 帮助我们熟悉CI/CD实践构建流程,为后续的开发提供自动化测试与集成部署的有效帮助。 |
[T.10] 团队项目:CI/CD实践
选择选项及选择理由
选项
我们选择了方案 A:GitHub Actions,任务选择的是自动运行测试,以单元测试为主,同时还补充了 Cypress E2E 冒烟测试。
理由
- 我们的项目代码已经托管在
GitHub上,直接使用GitHub Actions即可,不需要再额外搭建Jenkins等其他集成框架,配置成本最低。 GitHub Actions与Pull Request流程结合紧密,每次push或PR到dev分支都会自动执行测试,适合团队协作开发,也便于代码可能存在的潜在bug的及时发现。- 相比
Git Hooks,GitHub Actions运行环境统一、日志可追溯、结果对全队可见,更符合真正的CI思路。 - 对前端项目来说,自动测试的价值很高。它可以在代码合并前尽早发现页面结构变化、状态逻辑错误和基础交互失效,减少“本地能跑、合并后出错”的情况发生。
现有仓库中的CI配置文件的脚本
1 | |
实现方式及选择理由
实现方式
我们采用的是“单元测试 + E2E 冒烟测试”的实现方式。
- 单元测试使用
Vitest。
用来验证前端中较小粒度的逻辑和组件行为,例如:userStore的登录/退出逻辑RoomCreate、RoomJoin组件的输入与按钮启用逻辑- 一些工具函数行为
E2E测试使用Cypress。
用来验证页面在浏览器环境中的基本交互,例如:- 首页是否正常渲染
- “
CREATE ROOM”“JOIN ROOM”等按钮是否可见 - 房间输入后按钮是否按预期启用
CI运行环境选择GitHub Actions + Cypress官方浏览器容器。
这样做的原因是:- 浏览器、
Node环境更稳定 - 更适合运行
Cypress - 减少“本地能跑、
CI跑不起来”的环境差异
- 浏览器、
- 为了让
CI更稳定,我们额外做了以下处理:- 使用
npm缓存和Cypress二进制缓存,减少重复下载 npm ci和cypress install都加了重试逻辑- 通过
Xvfb提供虚拟显示环境,支持headless图形测试 test:e2e中先build再preview,使测试更接近生产环境
- 使用
分支范围、触发条件、执行动作
当前实际配置如下:
分支范围:
devtest/work
触发条件:
pushpull_request
执行动作:
- 检出代码
actions/checkout - 配置
Node.js环境 - 安装依赖
npm ci - 恢复构建脚本依赖
- 运行单元测试
npm run test:unit - 安装并检查
Cypress二进制 - 启动虚拟显示环境
- 运行
E2E测试npm run test:e2e
- 检出代码
因此,这套流程本质上是:提交代码后自动验证前端测试是否通过。
触发结果

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 yumooo!

