在持续集成(无头环境-> Mac OS X服务器)中,使用一个需要访问GUI的工具/库,xvfb/display模拟器/X11转发。

13
我们有一个Mac os x服务器(10.10.3),我们使用它来运行Jenkins的功能测试。
我们希望在我们的测试中使用一个工具/库(sikulix for information),它在幕后使用java.awt.Robot类-java.awt.GraphicsEnvironment-。问题是: 我们不能在headless env中使用这个java类,因为它需要访问GUI。
所以我想知道是否有解决方案/黑客来使这个工具与jenkins一起工作。
考虑到我们有一个USB-HDMI模拟器(mac headless accelerator),它模拟连接的显示器。
我们还安装了Xquartz、X11和xauth,所以我认为它可以通过强制java.awt.headless属性为false并使用X窗口来绕过这个java headless限制,但事实并非如此。
如果我理解不正确,请纠正:我们不需要真正的屏幕来做这件事,这是显示仿真器/模拟器的目标;是吗?
我已经成功尝试使用这个库进行测试:
用桌面(带监视器)使用它
使用远程Mac服务器机器A和本地Mac桌面机器B之间的屏幕共享(通过执行这个屏幕共享的终端脚本)vnc?
使用ssh -Y在我的linux电脑(client)上,它也是一个X Window System(X11)应用程序的服务器:它已经通过X11转发工作了,没有进行任何ssh配置更改(-Y标志)。java.awt.headless=false在这里很有用。
但我真的无法确定最后一个解决方案是否有用。虽然我通过ssh执行了脚本,但我连接了一个屏幕:可能会影响一些东西。
(请记住最终目标是使用jenkins执行测试)。
它引导我尝试:通过ssh -Y标志或修改ssh_config/sshd_config文件(访问mac-远程服务器-)来执行脚本,并激活屏幕共享,但它不能自动识别X窗口:(
以下是我的问题:
xvfb插件(jenkins)是否足以实现我们想要的功能?我还不知道如何配置它。
从mac服务器(脚本以jenkins为守护进程/代理执行;包括可能的ssh -Y连接,我还不知道如何使它工作)做一个X11forwarding到共享的屏幕上是否可能?- 也是服务器...不知道为什么它无法识别-。
是的,我知道,这个问题很奇怪,但我的大脑正在燃烧,我变得混乱了......
顺便说一下,我更喜欢真正的无头操作,但如果不可能,我必须使用屏幕共享,那也可以。
目前,我真的很想知道在无头环境下是否有可能启动需要X11的GUI应用程序(在mac上)...... 我认为只要安装正确,答案就是肯定的,但显然事情并没有那么简单......或者我可能理解有误。
对于X11转发,我设置了$DISPLAY变量,但仍然会收到“错误:无法打开显示器'address'”的消息。
即使我将显示器设置为本地、远程或地址,我仍然被带有GUI访问权限的库所阻止。
另一个解决方案可能是附加终端会话(屏幕共享终端/启动脚本的终端),我明天会尝试使用tmux。我仍然觉得奇怪的是服务器无法检测到它的共享会话(我想再说一次!)....屏幕是开着的,伙计们:s
使用xvfb:
export DISPLAY=:1
Xvfb :1 &

然后运行mvn命令,但它仍然无法正常工作。
1个回答

4
好的,一种解决方法是在屏幕共享终端中启动Jenkins(war)(或者只是打开Jenkins会话)。这样,当您启动作业时,它使用屏幕共享显示。实际上,问题只涉及访问GUI,无论是否连接屏幕。因此,如果您在服务器上安装了适当的应用程序(如X11、Xfvb、Mac的XQuartz等),它将起作用。我的问题在于:首先我有Java Headless限制,其次我还有-Java GUI-/-Mac SSH-限制,在Linux上不存在该限制。请参见atomicpirate的答案:如何在ssh后在Mac OSX上运行Java GUI。因此,总之,默认情况下,它通过ssh在Mac上使用java headless libs,强制使用GUI libs如下:

java.awt.headless = false

另外(适用于Mac)

export AWT_TOOLKIT=CToolkit

如果通过Jenkins启动测试,则还可以查看以下内容-如果无法访问WindowServer: 使用Jenkins构建Unity项目失败 编辑:尽管即使通过代理也不起作用,但仍然需要使用jenkins用户(VNC)打开会话。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接