本文档详细介绍了 nodemon 项目中使用的持续集成和持续部署 (CI/CD) 流水线。它涵盖了确保代码质量、测试和 nodemon 版本部署的自动化流程。
有关发布流程本身的信息,请参阅发布流程。
Nodemon 采用现代 CI/CD 方法,集成了 GitHub Actions 和传统的 Travis CI。这种双系统方法确保了向后兼容性,同时利用了最新的 GitHub 原生功能。
来源: .github/workflows/release.yml .github/workflows/node.js.yml .travis.yml package.json32-44
Nodemon 并行使用两个 CI 系统
GitHub Actions 是 nodemon 主要的 CI/CD 系统。它提供了更快的构建时间以及与 GitHub 的更紧密集成。
来源: .github/workflows/release.yml .github/workflows/node.js.yml
测试工作流在推送到 main 分支以及针对 main 分支的拉取请求时运行
来源: .github/workflows/node.js.yml4-30
发布工作流在 main 分支上成功运行测试后或直接推送到 main 分支时触发
来源: .github/workflows/release.yml1-29
Travis CI 作为辅助 CI 系统,主要用于在多个 Node.js 版本上进行测试
来源: .travis.yml1-17
Nodemon 使用多种工具来确保代码质量
| 工具 | 目的 | 配置 |
|---|---|---|
| ESLint | 静态代码分析 | 通过 npm run lint 运行 |
| Mocha | 测试框架 | 通过 npm run spec 运行 |
| commitlint | 提交信息验证 | 在 commitlint.config.js 中配置 |
| Husky | Git 钩子管理 | pre-commit 和 pre-push 钩子 |
来源: package.json32-44 package.json45-57 commitlint.config.js1-3
Nodemon 使用约定式提交来标准化提交信息并自动化版本控制。
来源: package.json33 commitlint.config.js1-3
自动化发布流程由 semantic-release 处理,它负责:
来源: package.json41 .github/workflows/release.yml25-29 .travis.yml13-14
测试套件作为 CI/CD 流水线的一部分运行
CI/CD 流水线使用以下环境变量和密钥
| 秘密 | 目的 | 应用场景 |
|---|---|---|
| GITHUB_TOKEN | 用于 GitHub API 认证 | GitHub Actions |
| NPM_TOKEN | 用于 npm 注册表认证 | GitHub Actions 和 Travis CI |
来源: .github/workflows/release.yml26-28 .travis.yml12
Nodemon 通过 semantic-release 使用语义化版本控制 (SemVer)。版本号根据提交类型自动确定
| 提交类型 | 示例 | 版本递增 |
|---|---|---|
| fix | fix: 解决文件监听问题 | 补丁版本 (0.0.x) |
| feat | feat: 添加对新配置选项的支持 | 次要版本 (0.x.0) |
| BREAKING CHANGE (破坏性变更) | feat!: 移除对 Node 8 的支持 | 主要版本 (x.0.0) |
来源: package.json41 package.json70
整个部署过程是自动化的,由 main 分支上成功的 CI 构建触发
来源: .github/workflows/release.yml .travis.yml
常见的 CI/CD 问题及其解决方案
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 代码检查失败 | 代码风格违规 | 在本地运行 npm run lint 并修复问题 |
| 测试失败 | 破坏性变更 | 在本地运行 npm test 进行调试 |
| 发布失败 | 无效的提交信息 | 确保提交遵循约定式提交格式 |
| 进程卡住 | 测试进程未终止 | 使用 npm run killall 进行清理 |
根据 TODO.md 文件,CI/CD 流水线有以下几项计划改进
来源: TODO.md1-8