菜单

CI/CD 流水线

相关源文件

本文档详细介绍了 nodemon 项目中使用的持续集成和持续部署 (CI/CD) 流水线。它涵盖了确保代码质量、测试和 nodemon 版本部署的自动化流程。

有关发布流程本身的信息,请参阅发布流程

1. CI/CD 概述

Nodemon 采用现代 CI/CD 方法,集成了 GitHub Actions 和传统的 Travis CI。这种双系统方法确保了向后兼容性,同时利用了最新的 GitHub 原生功能。

来源: .github/workflows/release.yml .github/workflows/node.js.yml .travis.yml package.json32-44

2. CI 系统

Nodemon 并行使用两个 CI 系统

2.1. GitHub Actions

GitHub Actions 是 nodemon 主要的 CI/CD 系统。它提供了更快的构建时间以及与 GitHub 的更紧密集成。

来源: .github/workflows/release.yml .github/workflows/node.js.yml

2.1.1. 测试工作流

测试工作流在推送到 main 分支以及针对 main 分支的拉取请求时运行

来源: .github/workflows/node.js.yml4-30

2.1.2. 发布工作流

发布工作流在 main 分支上成功运行测试后或直接推送到 main 分支时触发

来源: .github/workflows/release.yml1-29

2.2. Travis CI (旧版)

Travis CI 作为辅助 CI 系统,主要用于在多个 Node.js 版本上进行测试

来源: .travis.yml1-17

3. 质量保证工具

Nodemon 使用多种工具来确保代码质量

工具目的配置
ESLint静态代码分析通过 npm run lint 运行
Mocha测试框架通过 npm run spec 运行
commitlint提交信息验证commitlint.config.js 中配置
HuskyGit 钩子管理pre-commit 和 pre-push 钩子

来源: package.json32-44 package.json45-57 commitlint.config.js1-3

4. 提交标准

Nodemon 使用约定式提交来标准化提交信息并自动化版本控制。

来源: package.json33 commitlint.config.js1-3

4.1. 语义化发布

自动化发布流程由 semantic-release 处理,它负责:

  1. 根据提交类型确定下一个版本号
  2. 从提交信息生成发布说明
  3. 创建 GitHub 发布
  4. 将包发布到 npm

来源: package.json41 .github/workflows/release.yml25-29 .travis.yml13-14

5. 测试策略

测试套件作为 CI/CD 流水线的一部分运行

来源: package.json36-39

6. 环境变量和密钥

CI/CD 流水线使用以下环境变量和密钥

秘密目的应用场景
GITHUB_TOKEN用于 GitHub API 认证GitHub Actions
NPM_TOKEN用于 npm 注册表认证GitHub Actions 和 Travis CI

来源: .github/workflows/release.yml26-28 .travis.yml12

7. 版本控制策略

Nodemon 通过 semantic-release 使用语义化版本控制 (SemVer)。版本号根据提交类型自动确定

提交类型示例版本递增
fixfix: 解决文件监听问题补丁版本 (0.0.x)
featfeat: 添加对新配置选项的支持次要版本 (0.x.0)
BREAKING CHANGE (破坏性变更)feat!: 移除对 Node 8 的支持主要版本 (x.0.0)

来源: package.json41 package.json70

8. 持续部署流程

整个部署过程是自动化的,由 main 分支上成功的 CI 构建触发

来源: .github/workflows/release.yml .travis.yml

9. CI/CD 问题故障排除

常见的 CI/CD 问题及其解决方案

问题可能原因解决方案
代码检查失败代码风格违规在本地运行 npm run lint 并修复问题
测试失败破坏性变更在本地运行 npm test 进行调试
发布失败无效的提交信息确保提交遵循约定式提交格式
进程卡住测试进程未终止使用 npm run killall 进行清理

来源: package.json35-43

10. 未来改进

根据 TODO.md 文件,CI/CD 流水线有以下几项计划改进

  1. 将 Mocha 升级到新版本
  2. 将 JSHint 切换为 Prettier 进行代码格式化
  3. 将代码格式检查添加到 CI 流程中
  4. 简化代码库和测试流程

来源: TODO.md1-8