openQA 的云端工作站
2020 年 5 月 20 日 | Guillaume Gardet | CC-BY-SA-3.0
openQA 的云端工作站
对于那些不了解 openQA 的人来说,它是一个用于操作系统自动化测试的工具,也是 openSUSE 自动化测试计划的核心引擎。它主要用 Perl 实现,默认使用 QEMU 来启动和控制虚拟机,并使用 OpenCV 进行模糊图像匹配。总体架构分为 2
- 一个 openQA 服务器,又称 openQA Web UI
- 多个 openQA 工作站,运行测试
如果您想了解更多关于 openQA 的信息,请查看 文档。
运行测试的 openQA 工作站通常与 openQA Web UI 服务器位于同一网络中,这在大多数情况下都很好,但如果需要添加额外的硬件,则必须物理地发送它们,并且只有少数人可以处理,这可能存在问题。解决此问题的一种方法是使用基于云的机器,它们本质上位于单独的网络上,并且可以通过互联网访问。
好消息是,openQA 支持这种设置,方法是在工作站上使用本地缓存服务。该服务通过 openQA API 通过 HTTPS 按需下载资源(ISO、HDD 镜像等),而不是使用旧的 NFS 挂载方法。测试和针头已经存储在 git 仓库中,因此可以直接从远程 git 仓库中获取它们,而不是从 NFS 共享中获取它们。
第一个测试是在连接到 openqa.opensuse.org(简称 o3)的本地工作站上完成的,其中 NFS 共享已被缓存服务取代。但这仍然在同一网络中。
然后,又在以下位置执行了更多测试,添加了 aarch64 工作站:
- 公有云:一个 AWS EC2 A1 裸机实例,运行基于 qemu/kvm 的测试
- 远程机器
- Marvell ThunderX2 和 SolidRun HoneyComb LX2K,也运行基于 qemu/kvm 的测试
- 一个 Softiron Overdrive 1000,运行 generalhw 后端以在真实硬件上执行测试,目前是 Raspberry Pi 2 和两个 Raspberry Pi 3 (B 和 B+)


唯一的缺点是开发者模式,它要求工作站可以通过特定端口从 openQA Web UI 服务器访问,因此,在互联网上可访问。不幸的是,当前的 aarch64 远程工作站不支持这一点。
对于基于 qemu 的测试,强烈建议使用启用 KVM 的系统,否则,与启用 KVM 的系统相比,您将获得非常差的性能,运行时间大约慢 10 倍。因此,您需要使用裸机实例或可用时的嵌套虚拟化。
现在,我们将详细介绍设置仅访问 openQA API 的远程云工作站的具体配置。
设置
在工作站上安装所需的软件
与其他 openQA 工作站一样,您需要安装一些软件包。您可能希望使用最新版本的 openQA,因此使用 devel:openQA 和 devel:openQA:Leap:15.1 项目的二进制文件(如果您不使用 Leap 15.1,请调整 URL)
sudo zypper ar -f https://download.opensuse.org/repositories/devel:/openQA/openSUSE_Leap_15.1/devel:openQA.repo
sudo zypper ar -f https://download.opensuse.org/repositories/devel:/openQA:/Leap:/15.1/openSUSE_Leap_15.1/devel:openQA:Leap:15.1.repo
如果您使用 SLE15-SP1,您需要启用匹配的仓库并启用 PackageHub
sudo zypper ar -f https://download.opensuse.org/repositories/devel:/openQA/SLE_15_SP1/devel:openQA.repo
sudo zypper ar -f https://download.opensuse.org/repositories/devel:/openQA:/SLE-15/SLE_15_SP1/devel:openQA:SLE-15.repo
sudo SUSEConnect -p PackageHub/15.1/aarch64
现在,您可以安装所需的软件包
sudo zypper install openQA-worker os-autoinst-distri-opensuse-deps
从 openQA Web UI 主机获取 API 密钥
从 openQA Web UI 创建一组新的 API 密钥,或要求具有管理员权限的人为您创建一个密钥集。
设置工作站以使用 API 密钥和缓存
对于远程工作站,您无法从 openQA 服务器 NFS 挂载 /var/lib/openqa/cache,因为只能访问 openQA API。相反,您必须使用如下所述的 缓存服务。
使用以下内容更新 /etc/openqa/workers.ini
[global]
HOST = http://openqa.opensuse.org http://myotheropenqa.org
CACHEDIRECTORY = /var/lib/openqa/cache
CACHELIMIT = 50 # GB, default is 50.
CACHEWORKERS = 5 # Number of parallel cache minion workers, defaults to 5
使用从 Web UI 生成的密钥更新 /etc/openqa/client.conf
[openqa.opensuse.org]
key = 0123456789ABCDEF
secret = FEDCBA9876543210
启动并启用缓存服务
sudo systemctl enable --now openqa-worker-cacheservice
启用并启动缓存工作站
sudo systemctl enable --now openqa-worker-cacheservice-minion
同步测试和针头
测试和针头不属于缓存服务,而是存储在 GIT 仓库中,因此您需要设置这些仓库的自动更新。目前,最简单的方法是使用 openQA 包中的 fetchneedles 脚本来获取 Git 仓库并创建一个 cron 作业来经常更新它(例如,每分钟)。
安装所需的软件包并首次运行 fetch 脚本。
sudo zypper in --no-recommends openQA system-user-wwwrun
sudo /usr/share/openqa/script/fetchneedles
此外,如果您计划运行 MicroOS 测试
cd /var/lib/openqa/share/tests
sudo ln -s opensuse microos
cd /var/lib/openqa/share/tests/opensuse/products/microos
sudo ln -s ../opensuse/needles/
现在,添加一个 cron 作业以每分钟获取测试和针头 /etc/cron.d/fetchneedles
-*/1 * * * * geekotest env updateall=1 /usr/share/openqa/script/fetchneedles
并重新启动服务
sudo systemctl restart cron
享受您的远程工作站
现在您可以(重新)启动您的工作站
sudo systemctl enable --now openqa-worker@1
并且,您的远程工作站应该已在 openQA 服务器上注册。检查 openQA Web UI 中的 /admin/workers 页面。享受吧!
祝您玩得开心!