Docker 的测试基础设施

  • João Miranda
  • 金灵杰

2015 年 8 月 2 日

话题:持续集成DevOps语言 & 开发

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

持续集成DevOps语言 & 开发