我在Windows 7上设置了jenkins代理,在Linux上安装了jenkins服务器。我正在Windows代理上运行GUI测试。如果我连接了远程桌面连接,它运行正常,但否则失败。我找到了这个链接Jenkins on Windows and GUI Tests without RDC
但是提供的解决方案非常模糊。似乎唯一的解决方案是以某种方式使Jenkins服务器始终打开远程桌面连接。但我找不到这样做的选择。 谁能明确教我如何解决这个问题?
非常感谢!
答案 0 :(得分:22)
在测试运行之前,您的从属计算机必须位于桌面上 正常。我们遇到了同样的问题。
解决方案是让测试机器启动并自动登录到 桌面。确保测试仅在桌面之后启动 可用,我们添加了一个计划任务,设置为在用户登录时运行, 这将通过Java Web Start启动Jenkins从站。那样, 一旦桌面运行,Jenkins只会看到奴隶。后 一切正常。
这是您所关联问题的获胜答案,并且非常清楚该怎么做。整个设置在Jenkins之外。 Jason Swager描述了他如何自动登录到桌面计算机的用户,然后在用户会话中启动Jenkins slave。
解决方案是让测试机器启动并自动登录到桌面
配置标准Windows桌面以在Windows启动时自动登录特定用户。这样,没有人需要物理登录桌面。 (见How to turn on automatic logon in Windows 7)
您需要在此用户设置中启动Jenkins slave。否则,Jenkins slave将无法访问Windows UI组件(换句话说,无法与桌面交互)。
确保测试仅在桌面之后启动 可用,我们添加了一个计划任务,设置为在用户登录时运行, 这将通过Java Web Start启动Jenkins从属。
因此,您必须create a scheduled task并将其配置为启动Jenkins client using Java Web Start。
这样,Jenkins只会在桌面运行后看到奴隶。后 一切正常。
当奴隶在线时,您可以使用它来运行UI测试。
答案 1 :(得分:5)
要解决此问题,请按照我在此解释的那样设置Windows自动登录: https://serverfault.com/questions/269832/windows-server-2008-automatic-user-logon-on-power-on/606130#606130
然后为Jenkins slave创建一个启动批处理(将它放在Jenkins目录中),这将在桌面上启动它的控制台,并允许GUI作业运行:
java -jar slave.jar -jnlpUrl http://{Your Jenkins Server}:8080/computer/{Your Jenkins Node}/slave-agent.jnlp
(slave.jar可以从http:// {Your Jenkins Server}下载:8080 / jnlpJars / slave.jar)
编辑: 如果您正在获取黑色屏幕截图(例如,使用Selenium时),请创建一个断开远程桌面的批处理文件,而不是使用常规X按钮关闭RDP会话:
%windir%\system32\tscon.exe %SESSIONNAME% /dest:console
答案 2 :(得分:2)
以下事情对我有用:
在Jenkins中执行windows shell命令:
cmdkey /generic:TERMSRV/<servername> /user:<username> /pass:<password>
mstsc /v:<servername> /w:<width> /h:<height>
cd <path to your pom.xml>
<maven command>
(例如mvn test -Dfiles_to_run=groupLaunch.xml
cmdkey /delete:TERMSRV/<servername>
它在由Jenkins提供支持的虚拟mstsc会话(Jenkins-to-Win)中创建具有指定宽度和高度的真实mstsc会话(Win-to-Win)。
答案 3 :(得分:0)
我尝试了这里提供的解决方案,但没有任何方法可以帮助我。最后,我想出了一个解决方法。
我在不同的VM(VM2)中打开了与VM的RDP连接。 我让第一个连接在VM2内部打开并与之断开连接。
虽然有效,但这意味着可以使用两台虚拟机。
答案 4 :(得分:0)
您仍然需要使用RDP,但就我而言,我们可以在同一个VM中使用RDP的 loopback 。
程序:
现在,您将在一个VM中为两个帐户安装两个Jenkins服务器
奴隶1 - 帐户1
奴隶2 - 帐户2
在slave 2(带帐号2)中,运行rdp命令连接到slave 1(带帐号1),如下 开始/ b“”“C:\ RDP \ rdp.exe”/ v: 127.0.0.2 / domain:\ / u:admin / p:xxxx / fullscreen / w:1920 / h:1200
127.0.0.2非常重要,它是RDP的环回连接
将上述命令放入Jenkins作业中,其名称为“OpenRDP_ToVMXXX”,然后您可以在启用了GUI的奴隶1上运行任何测试,享受。
答案 5 :(得分:0)
由于上述解决方案似乎有点过大,所以我使用了这种方法:
Jenkins
服务java -jar C:\Program Files (x86)\Jenkins\jenkins.war
从命令行启动Jenkins 由于某种原因,以这种方式启动时,我必须安装所有插件以及所有内容,因此我建议创建一个备份,其中有用于此的插件。祝好运。 :)