Jest - 部署和 CI/CD
在本章中,我们将向您展示如何将 Jest 测试添加到您的持续集成 (CI)和持续部署 (CD)管道中。这有助于在不同的环境中自动运行测试,因此您可以更快、更可靠地发布代码。我们将涵盖的主题包括:
Jest - 持续集成
持续集成 (CI) 是指开发人员定期将代码提交到共享存储库。目标是通过在将代码添加到主代码库时运行测试来尽早发现错误。通过将 Jest 与您的 CI 管道集成,您可以自动运行测试以验证您的代码在每次更改后是否按预期工作。以下是将 Jest 与 CI 集成的步骤。
为 CI 设置 Jest
要将 Jest 集成到您的 CI 管道,您首先需要确保您的项目已正确配置 Jest。确保:
- Jest 作为开发依赖项安装:运行以下命令安装 Jest:
npm install --save-dev jest
"scripts": { "test": "jest" }
在 CI 中运行 Jest
持续集成 (CI) 系统(如 Jenkins、Travis CI、GitHub Actions 和 GitLab CI)会自动检测您的测试脚本,并在将新提交推送到存储库时运行它们。
要在 CI 服务器中运行 Jest,您通常会使用此命令来执行测试并生成测试报告:
npm run test -- --ci --coverage
为 Jest 配置 CI
大多数 CI 平台都支持与 Jest 轻松集成。以下是 Travis CI 等平台的示例配置。
- 创建 .travis.yml 文件来定义构建过程:
language: node_js node_js: - "14" # Use Node.js version 14 install: - npm install # Install dependencies script: - npm run test # Run Jest tests
在此示例中,每当您将代码推送到 Git 存储库 时,Jest 都会自动运行。
针对 CI 优化 Jest
为了使 Jest 在 CI 环境中运行得更快、更高效,您可以应用以下优化:
- 并行性:Jest 默认并行运行测试,从而加快测试过程。您可以通过设置 maxWorkers 选项来控制 Jest 使用的工作线程数。
"jest": { "maxWorkers": "50%" # 限制为可用 CPU 的 50% }
npm run test -- --ci // 自动禁用监视模式
npm run test -- --coverage // 生成覆盖率报告
通过应用这些优化,您的 Jest 测试将在 CI 管道 中运行得更快、更可靠。
Jest - GitHub Actions
GitHub Actions 是一项 持续集成 和 持续部署 (CI/CD) 服务,可让您直接在 GitHub 中自动执行测试、构建和部署代码等任务。您可以集成 Jest,以便在将代码推送到存储库时自动运行测试。
将 Jest 与 GitHub Actions 集成的步骤
- 创建 GitHub Actions 工作流文件:在您的 GitHub 存储库中,如果尚不存在名为 .github/workflows 的目录,请创建该目录。在此目录中,为您的工作流创建一个文件(例如 jest-tests.yml)。
- 定义工作流:在工作流文件中,定义设置环境、安装依赖项和运行 Jest 测试的步骤。以下是在 GitHub Actions 上运行 Jest 测试的工作流示例:
name: Run Jest Tests on: push: branches: - main # Run on push to the 'main' branch pull_request: branches: - main # Run on pull requests targeting 'main' branch jobs: test: runs-on: ubuntu-latest # Run on the latest Ubuntu runner steps: - name: Checkout code uses: actions/checkout@v2 # Get the latest code from the repository - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '14' # Use Node.js version 14 - name: Install dependencies run: npm install # Install project dependencies - name: Run Jest tests run: npm run test -- --ci --coverage # Run tests with coverage reporting
Jest - 部署策略
确认您的代码适用于 Jest 测试后,下一步是部署。本节介绍如何将 Jest 测试添加到您的部署管道,以确保在将代码部署到生产环境之前运行测试。
部署策略的类型
以下是您可以用来发布应用程序的常见部署策略:
- 部署前测试:在部署应用程序之前,运行 Jest 测试以确保一切按预期运行非常重要。此步骤在任何部署策略中都很重要,可以尽早发现错误并避免生产中出现问题。
- 自动部署 (CI/CD):在 CI/CD(持续集成/持续部署) 中,您的测试和部署过程是自动化的。Jest 测试成功通过后,您的新代码将自动部署。这种方法可以加快发布过程,同时确保代码稳定。
- 手动部署(带测试):手动部署允许您控制新代码的上线时间和方式。但是,在部署代码之前,您仍需要运行 Jest 测试以确保一切稳定且无错误。
- A/B 测试部署:A/B 测试涉及向不同的用户组发布应用的两个版本(版本 A 和版本 B)以比较性能。在决定保留哪个版本之前,会对两个版本运行 Jest 测试以确保它们正常运行。
- 重新创建部署:重新创建部署意味着用新版本替换应用的当前版本。在切换之前,您需要对新版本运行 Jest 测试以确认其正常运行。
- 金丝雀发布:金丝雀发布首先将应用的新版本部署给一小部分用户。在将新版本发布给更多受众之前,会对新版本运行 Jest 测试以发现任何错误。如果通过测试,该版本将推广给更多用户。
- 影子部署(暗发布):影子部署(也称为暗发布)是指您发布应用的新版本但不向用户公开。 Jest 测试在后台运行,以确保新版本在上线之前正常运行。
- 蓝绿部署:在蓝绿部署中,您有两个相同的环境:一个用于当前版本(蓝色),另一个用于新版本(绿色)。在将用户切换到绿色环境之前,Jest 测试会在绿色环境上运行,确保生产中不会出现停机或问题。
- 持续部署 (CD):使用持续部署,新代码每次通过 Jest 测试时都会自动部署。Jest 测试是管道的关键部分,因此只会发布经过测试的稳定代码。此方法可帮助团队更快地发布功能。
如何在 Jest 中选择正确的部署策略?
选择正确的部署策略取决于您的项目需求。考虑以下因素:
- 项目规模和复杂性:对于依赖关系较少的小型项目,蓝绿部署或滚动部署等更简单的策略可能会很有效。具有更复杂要求的大型项目可以从金丝雀部署或A/B 测试等高级策略中受益。
- 可用性和可扩展性需求:如果您的应用程序需要处理高流量,或者您需要快速更新的能力,支持滚动更新的策略将会很有帮助。
- 可用资源:如果您的团队规模较小或缺乏高级策略经验,请选择更简单、更易于管理和维护的部署方法。
- 对用户的影响:确保选择一种部署策略,以最大限度地减少停机时间并确保用户在更新期间获得流畅的体验。
使用 Jest 进行部署的最佳实践
要实现顺利部署,请遵循以下集成 Jest 测试的最佳实践:
- 在部署之前运行 Jest 测试部署:始终在部署过程中包含 Jest 测试,无论是自动还是手动,以便尽早发现问题。
- 部署后监控:即使在 Jest 测试通过后,也要密切关注生产中的应用,以发现任何意外问题。
- 优化 Jest 以加快执行速度:在 CI/CD 设置中,确保 Jest 测试快速运行以避免部署过程延迟。
- 为您的部署策略配置 Jest:调整 Jest 设置以适合您的部署方法,例如 Canary 或 A/B 测试,以获得更好的结果。