菜单

测试管道

相关源文件

本文档介绍了用于验证 Gumroad 平台代码质量和功能的自动化测试基础设施。测试管道包括代码质量检查、并行测试执行和部署门集成。

有关测试之前的构建过程的信息,请参阅构建过程。有关成功测试后的部署自动化,请参阅部署自动化

概述

测试管道包含两个主要的 GitHub Actions 工作流,它们处理代码验证的不同方面

  • 代码质量管道 - 自动化格式化、代码检查和静态分析
  • 测试执行管道 - 与部署集成的并行测试套件执行

来源: .github/workflows/autofix.yml1-47 .github/workflows/tests.yml1-489

代码质量管道

代码质量管道通过 autofix 工作流在拉取请求上自动运行,确保一致的格式化并在代码审查前捕获静态分析问题。

质量检查顺序

工具目的自动修复
TypeScript类型检查和编译
ESLintJavaScript/TypeScript 代码检查
Prettier代码格式化
RuboCopRuby 风格和代码检查
SVGOSVG 优化

当检测到格式化或代码检查违规时,管道使用 autofix-ci/action 自动将修复提交回拉取请求分支。

来源: .github/workflows/autofix.yml14-46

测试执行管道

测试执行管道构建容器化测试环境,并在多个自托管运行器上并行运行完整的测试套件。

Docker 镜像构建过程

管道构建专用于测试的 Docker 镜像

  • web_base - 带有 Ruby 和系统依赖的基础应用程序镜像
  • web_base_test - 带有额外测试工具的测试专用基础镜像
  • web:test-{sha} - 包含应用程序代码和测试设置的完整测试镜像

来源: .github/workflows/tests.yml13-153

并行测试执行

测试套件分为两类,针对不同的执行特性进行了优化

快速测试

  • 并行节点 15
  • 测试模式: spec/**/*_spec.rb(不包括 spec/requests/**/*_spec.rb
  • 超时:15 分钟
  • 重点:单元测试、模型测试、服务测试

慢速测试

  • 并行节点 45
  • 测试模式: spec/requests/**/*_spec.rb
  • 超时:15 分钟,3 次重试
  • 重点:集成测试、请求/响应测试

这两类测试都使用 Knapsack Pro 进行智能测试分发和队列管理。

测试环境配置

每个测试节点都在一个独立的 Docker Compose 环境中运行,包含以下服务

服务目的配置
db_testMySQL 测试数据库端口 3306,每个测试节点独立
测试容器Rails 应用程序RAILS_ENV=testRUBY_YJIT_ENABLE=1

测试环境变量

来源: .github/workflows/tests.yml184-408

部署集成

main 分支上成功完成快速测试和慢速测试套件后,管道将自动解除相应 Buildkite 部署管道的阻止。

Buildkite 集成过程

unblock_deployment_from_buildkite 作业执行以下步骤

  1. 构建查找 - 搜索与当前提交 SHA 匹配的被阻止的 Buildkite 构建
  2. 作业识别 - 查找键为 require-approval 的手动审批作业
  3. 解除阻止请求 - 发送 PUT 请求以解除部署作业的阻止
  4. 重试逻辑 - 实现 3 次重试,每次间隔 5 分钟

使用的 API 端点

  • GET /v2/organizations/gumroad-inc/pipelines/gumroad/builds
  • GET /v2/organizations/gumroad-inc/pipelines/gumroad/builds/{number}
  • PUT /v2/organizations/gumroad-inc/pipelines/gumroad/builds/{number}/jobs/{job_id}/unblock

来源: .github/workflows/tests.yml426-489

基础设施和运行器

测试管道使用自托管的 GitHub Actions 运行器,以实现最佳性能和资源控制

运行器配置

运行器用途功能
antiwork-1测试执行,镜像拉取Docker, Compose, Quay.io 访问
antiwork-2测试执行,镜像拉取Docker, Compose, Quay.io 访问
ubicloud-standard-2代码质量检查Node.js, Ruby, npm/bundle

资源管理

管道实施全面的清理程序以防止资源耗尽

  • 容器清理 - 每个作业完成后移除测试容器
  • 卷清理 - 移除测试期间创建的 Docker 卷
  • 网络清理 - 移除 Compose 创建的 Docker 网络
  • 镜像清理 - 测试完成后移除测试镜像

清理命令

来源: .github/workflows/tests.yml258-264 .github/workflows/tests.yml401-407 .github/workflows/tests.yml410-425