持续集成/持续交付中的测试管理:基于真实流水线的 GitHub Actions、GitLab CI 与 Jenkins 对比

发布日期:2026-07-06 10:04:21   浏览量 :2
发布日期:2026-07-06 10:04:21  
2

摘要

自动化测试套件的质量取决于运行它的系统:如果测试仅在开发人员记得运行时才执行,那么它们所保护的契约就只是有时得到强制执行。本文通过让三个最广泛使用的持续集成/持续部署(CI/CD)测试管理工具——GitHub ActionsGitLab CI/CDJenkins——执行完全相同的工作来进行比较:在每次代码推送时运行相同的真实应用程序接口(API)测试套件(使用 Jest 和 Supertest,包含 8 个集成测试,覆盖率达到 100%,源自我之前的文章)。我们没有比较各自的营销页面,而是在一个公共代码仓库中并排比较这三个真实的流水线配置文件。比较内容涵盖配置风格、托管模式、依赖缓存、构建产物和生态系统,并以一份实用的决策指南作为结尾。包含所有三个流水线配置的完整演示代码仓库:https://github.com/GianfrancoArocutipa/ci-testing-comparative

实验:同一套测试,三条流水线

比较持续集成(CI)工具通常就像比较苹果和橘子——项目不同,任务也不同。为了公平起见,本代码仓库为所有三种工具分配了完全相同的任务:

  1. 检出代码。
  2. 使用 npm ci 安装依赖项。
  3. 运行 npx jest --coverage --ci(针对一个 Express 应用程序运行 8 个 API 测试)。
  4. 将覆盖率报告保存为构建产物。
  5. 如果任何测试失败,则使构建失败——从而阻止代码合并。

该代码仓库同时包含所有三种配置,这本身就是一种现实世界中的常见模式:在持续集成服务提供商之间迁移的团队通常会并行运行它们一段时间。

.github/workflows/ci.yml   → GitHub Actions
.gitlab-ci.yml             → GitLab CI/CD
Jenkinsfile                → Jenkins

流水线 1 — GitHub Actions

配置文件位于 .github/workflows/ 目录下,每个工作流对应一个 YAML 文件,由事件触发(如代码推送、拉取请求、定时任务或手动触发):

name: CI — API 测试

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest        # GitHub 托管的运行器,无需设置
    strategy:
      matrix:
        node-version: [20, 22]    # 在两个 Node 版本上运行相同的测试套件

    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据