在持续集成(无头环境 - > mac os X服务器)中,使用需要访问GUI的工具/ lib,xvfb / display emulator / X11转发

我们有一个Mac OS服务器(10.10.3),我们用它来运行Jenkins的功能测试 .

我们想(在我们的测试中)使用一个工具/库(sikulix作为信息),它使用了引擎java.awt.Robot类-java.awt.GraphicsEnvironment- . 问题是:我们不能在无头环境中使用这个java类,因为它需要访问GUI .

所以我想知道是否有解决方案/黑客使这个工具与jenkins一起工作 .

考虑到我们有一个USB-HDMI模拟器(mac无头加速器)模拟附加的显示器 .

我们还安装了Xquartz,X11,xauth,所以我认为它会绕过这个java无头限制,强制将java.awt.headless属性设置为false,并使用X窗口,但事实并非如此 .

如果我错了,请纠正我:我们不需要有真正的屏幕来做到这一点,这是显示模拟器/模拟器的目标;不是吗?

我在我们的测试中成功尝试使用此lib:

  • 在桌面上使用它(带显示器,有效)

  • 使用 remote mac server 机器A和 local mac desktop 机器B之间的屏幕共享(通过执行此屏幕共享终端中的脚本)vnc?

  • 在我的linux计算机(客户端)上使用ssh -Y,它也是X Window System(X11)应用程序的服务器:它在没有任何ssh配置更改(-Y标志)的情况下进行了X11转发 . java.awt.headless = false在这里很有用

但我无法确定最后的解决方案是否有用 . 虽然我已经通过ssh执行了脚本,但我连接了一个屏幕:它可能会影响某些东西 .

(请记住,最终目标是使用jenkins执行测试) .

它引导我尝试:通过带有-Y标志的ssh执行脚本,或者通过修改ssh_config / sshd_config文件(访问mac -remote服务器)并激活屏幕共享,但它不会自动识别X-window :(

在这里我的问题:

  • xvfb插件(jenkins)是否足以满足我们的需求?我不知道如何配置它 .

  • 是否有可能从mac服务器(用jenkins作为守护进程/代理执行的脚本;包括ssh -Y connexion,我还不知道如何让它工作)到共享的屏幕上进行X11转发?-which也是服务器....不知道为什么它不能识别它 - .

是的,我知道,这个问题很奇怪,但我的大脑正在燃烧,我感到困惑......

顺便说一句,我宁愿做一切真无头,但如果不可能,我必须使用屏幕共享,我很好 .

目前我真的很想知道是否有可能在无头环境中启动需要X11 -on mac的GUI应用程序...我认为正确的安装答案是肯定的,但显然它不是那么简单......或者我一定不明白 .

对于X11转发,我有$ DISPLAY var set,但我仍然可以

错误:无法打开显示'地址'

即使我将显示设置为本地,远程或地址,我仍然被具有GUI访问权限的lib阻止 .

另一种解决方案可能是附加终端会话(屏幕共享终端/终端启动脚本),我将在明天尝试使用tmux . 我仍然觉得奇怪,服务器无法检测到它的共享会话(我想再说一次!)....有一个打开的屏幕花花公子:s

使用xvfb:

export DISPLAY=:1
Xvfb :1 &

然后mvn命令,但它仍然无法正常工作 .

回答(1)

2 years ago

好吧,一个解决方案是在屏幕共享终端中启动jenkins(war)(或者只是打开jenkins会话) . 这样,当您启动作业时,它会使用屏幕共享显示 .

[事实上这不是真的,问题只是访问GUI,屏幕附加或没有 . 因此,如果您在服务器上安装了相应的应用程序(X11,Xfvb,XQuartz for mac等等),它将起作用 . edit :仍然不确定]

我的问题是:首先我有java无头限制,其次我还有-java GUI - / - mac ssh-限制,这在Linux上不存在 .

请参阅atomicpirate的回答:How to run a java GUI on mac osx after ssh

总而言之,默认情况下它通过mac上的ssh使用java无头库,强制它使用GUI库:

java.awt.headless = false

加(适用于mac)

export AWT_TOOLKIT = CToolkit

如果您通过Jenkins启动测试,您可能也会看到这个 - 如果您无法访问WindowServer-:Build Unity project with Jenkins failed

Edit :虽然它对我不起作用,即使是通过Agent,但无论如何都需要用jenkins用户(VNC)打开会话 .