openQA 的云端工作站

2020 年 5 月 20 日 | Guillaume Gardet | CC-BY-SA-3.0

Cloud based workers for openQA

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 工作站:

SolidRun HoneyComb LX2K

RPi3 and SabreLite

唯一的缺点是开发者模式,它要求工作站可以通过特定端口从 openQA Web UI 服务器访问,因此,在互联网上可访问。不幸的是,当前的 aarch64 远程工作站不支持这一点。

对于基于 qemu 的测试,强烈建议使用启用 KVM 的系统,否则,与启用 KVM 的系统相比,您将获得非常差的性能,运行时间大约慢 10 倍。因此,您需要使用裸机实例或可用时的嵌套虚拟化。

现在,我们将详细介绍设置仅访问 openQA API 的远程云工作站的具体配置。

设置

在工作站上安装所需的软件

与其他 openQA 工作站一样,您需要安装一些软件包。您可能希望使用最新版本的 openQA,因此使用 devel:openQAdevel: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 页面。享受吧!

祝您玩得开心!

分享此帖子