Selenium 的持续集成实现
此文档之前位于 wiki 上
通用架构
我们有许多运行 Ubuntu 的 Google Compute Engine 虚拟机,目前托管在 {0..29}.ci.seleniumhq.org - 它们有公开可寻址的 DNS 设置,指向 ab.{0..29}.ci.seleniumhq.org,以便 cookie 测试可以进行子域查找。
其中一台机器 ci.seleniumhq.org 正在运行 jenkins。如果您想要 jenkins 的登录名,请联系 juangj。“Build All Java”作业轮询 SCM 的更改,并执行以下操作
- 对“release”目标、任何将要运行的测试以及运行这些测试所需的任何工件(例如 IEDriverServer 可执行文件)执行干净构建
- 将整个构建的工作目录打包并发布到 http://ci.seleniumhq.org/selenium-trunk-r${REVISION}.tgz - 这稍后将用于测试运行
- 将 selenium-server-standalone jar 发布到 http://ci.seleniumhq.org/selenium-server-standalone-r${REVISION}.tgz - 这在运行测试时由 SauceLabs 直接复制下来。
- 将 IEDriverServer 打包成 zip 文件并发布到 http://ci.seleniumhq.org/IEDriverServer-Win32-r${REVISION}.zip - 这由 SauceLabs 直接复制下来以运行 IE 测试。此机器由 1TB 持久磁盘支持,它可以容纳许多构建工件,但应偶尔清除(尤其是在区域之间移动磁盘时)。
当此构建成功时,它会触发我们关心的每个操作系统/浏览器/测试组合的下游构建。它还会触发下游的干净构建,以确保我们的 maven pom 仍然有序(“Maven 构建”)。
除了“Maven 构建”与编译在同一个构建节点上运行(一个具有 32GB RAM 的强大的 8 核机器)之外,所有下游构建都在单独的构建节点上运行。
下游构建使用环境变量配置,如 SauceDriver 类所示。下游构建从构建主服务器下载 selenium-trunk tar,然后运行测试(这些测试应该已经由 Build All Java 规则编译)。其中两个下游构建是特殊的;“HtmlUnit Java Tests”和“Small Tests”只是在本地无头运行。其他构建使用 SauceLabs。
关于网络的说明:构建节点设置在内部网络 10.1.0/24 上,因此它们之间的网络通信非常快速和免费。
当运行无头浏览器测试时,测试文件 servlet 会在由环境变量确定的端口(231${EXECUTOR_NUMBER} 和 241${EXECUTOR_NUMBER} - EXECUTOR_NUMBER 目前始终等于 0)上托管测试文件。测试使用的主机名由环境变量设置(ab.${NODE_NAME}.ci.seleniumhq.org,其中 NODE_NAME 在 {0..29} 中)。使用我们的凭据(存储在 jenkins 全局环境变量中,在“系统配置”页面上设置)从 SauceLabs 请求浏览器。Jenkins 当前设置为每个测试运行并行运行三个测试类,同样在“系统配置”页面上设置。
测试运行,结果会通知到 IRC。
感谢 SauceLabs 和 Google 捐赠基础设施来运行所有这些测试。
常见问题
我想像 Jenkins 一样在 Sauce 上运行我的测试(我的测试在 CI 上失败了,但在我的机器上运行良好!)
请参阅 SauceDriver 页面
我想添加一个新的浏览器(Firefox 发布了新版本!)
Jenkins 没有很好的模板概念。我(dawagner)有一些 Selenium 脚本可以自动化 Jenkins 的 UI,以使用预定义的设置创建新作业。如果您想手动执行此操作,以下是大致的步骤
- 找到您要复制的最相似的配置。如果它是新的 Firefox 版本,请找到最新的 Firefox(它应该大致有 6 个相关联的构建:Javascript + Java {Windows,Linux} **{Native,Synthesized}
- 对于每个构建,创建一个新作业(登录后在主页左侧的菜单中)
- 以其他作业的样式命名作业。选择“复制现有作业”,然后输入您正在复制的作业。
- 滚动浏览预先填充的作业。替换版本号、浏览器名称和任何其他需要替换的详细信息。对于 Firefox 更新,目前有三个地方您应该替换数字(“browser_version”字段和“Build Execute Shell”中的两个)
- 保存
- 转到“Build All Java”任务,对其进行配置,将您的新构建添加到“要构建的项目”字段中,其中列出了许多其他项目。**
如果它是 Firefox 更新,您可能还需要删除现有的构建。