Jessie Frazelle 是 Docker 核心团队成员,负责 Docker 的测试基础设施。他描述了这些测试设施是如何构建在Docker 容器之上的。
这些测试基础设施由大约50 台服务器组成。它们涵盖六种Docker 保存镜像使用的存储驱动、所有Linux 发行版和Docker 支持的各种Linux 内核版本。Windows 平台的Docker 客户端也涵盖在测试基础设施中,它在Windows 主机上提供了运行Docker 的轻量级虚拟机。
推送到 master 分支和拉取请求 (pull requests, PR) 都有它们自己的工作流。除了执行所有 Docker 测试用例之外,每次成功推送到 master 分支之后,都会发布 Docker二进制文件和文档,以提供给希望尝试前沿版本的人。 Docker 二进制文件构建服务(docker-bb)负责处理构建 master 分支的二进制文件。
拉取请求有自己的工作流和服务器。每个拉取请求(每周有超过 100 个),都会针对实验性二进制文件和Windows Docker 客户端执行Docker 测试用例。Frazelle 创建了一个小应用 Leeroy ,管理所有的拉取请求(PR)的构建。它的职责包括更新每个拉取请求的状态(等待、成功、失败或者错误)和验证 Docker 原始开发者认证。
Docker 使用 Jenkins 作为持续集成服务器,因为它提供了灵活性,同时控制团队需求。正如预期那样,Frazzele 使用官方镜像来将Jenkins 运行在容器中。
作为服务发现工具的 Consul ,是整个测试基础设施的关键部分。Frazelle 利用它的服务标记功能来追踪数据,包括Linux 内核版本、存储驱动。这样反过来有助于故障排除活动。Consul 的健康检测利用 consul-alerts 组件,在服务出现故障的时候通知团队成员。
Docker 团队使用实时分布式消息平台 nsq 集成这些流程。例如用于链接 GitHub 钩子到 Docker 二进制构建服务(docker-bb)或者部署 master 分支上的文档。
支撑测试基础设施的所有服务都运行在 Docker 容器中,这些测试基础设施总是使用 Docker 最新的发布候选版本。有时也会使用最新的 master 二进制文件,以便尽早的发现缺陷。
查看英文原文: Docker’s Testing Infrastructure
评论