我在窗口 7 上设置了 jenkins 代理,在 Linux 上设置了 jenkins 服务器。我正在 Windows 代理上运行 GUI 测试。如果我连接了远程桌面连接,它运行良好,否则失败。我找到了这个链接,Jenkins on Windows and GUI Tests without RDC
但是那里提供的解决方案非常模糊。似乎唯一的解决方案是以某种方式使 Jenkins 服务器始终打开远程桌面连接。但我找不到这样的选择。谁能清楚地教我如何解决这个问题?
非常感激!
我在窗口 7 上设置了 jenkins 代理,在 Linux 上设置了 jenkins 服务器。我正在 Windows 代理上运行 GUI 测试。如果我连接了远程桌面连接,它运行良好,否则失败。我找到了这个链接,Jenkins on Windows and GUI Tests without RDC
但是那里提供的解决方案非常模糊。似乎唯一的解决方案是以某种方式使 Jenkins 服务器始终打开远程桌面连接。但我找不到这样的选择。谁能清楚地教我如何解决这个问题?
非常感激!
您的从机必须在桌面上才能正常运行测试。我们遇到了同样的问题。
解决方案是让测试机器启动并自动登录到桌面。为了确保测试仅在桌面可用后开始,我们添加了一个计划任务,设置为在用户登录时运行,这将通过 Java Web Start 启动 Jenkins 从站。这样,Jenkins 只会在桌面运行时看到从属服务器。之后,一切正常。
这是您链接到的问题的成功答案,并且非常清楚该怎么做。整个设置在 Jenkins 之外。Jason Swager 描述了他如何自动化用户登录到 Windows 桌面计算机,然后在用户会话中启动 Jenkins 从站。
解决方案是让测试机器启动并自动登录到桌面
配置标准 Windows 桌面以在 Windows 启动时自动登录特定用户。这样,没有人需要物理登录桌面。(请参阅如何在 Windows 7 中打开自动登录)
您需要在此用户设置中启动 Jenkins 从站。否则,Jenkins 从站将无法访问 Windows UI 组件(或者换句话说,无法与桌面交互)。
为了确保测试仅在桌面可用后开始,我们添加了一个计划任务,设置为在用户登录时运行,这将通过 Java Web Start 启动 Jenkins 从站。
因此,您必须创建一个计划任务并将其配置为使用 Java Web Start 启动您的 Jenkins 客户端。
这样,Jenkins 只会在桌面运行时看到从属服务器。之后,一切正常。
当 slave 在线时,你可以使用它来运行你的 UI 测试。
要解决它,请按照我在此处的说明设置 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
以下事情对我有用:
在 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)。
我尝试了此处提供的解决方案,但对我没有任何帮助。最后,我想出了一个解决方法。
我在不同的 VM (VM2) 中打开了与 VM 的 RDP 连接。我在 VM2 中打开了第一个连接并断开了连接。
它有效,但这意味着有两个可用的虚拟机。
由于上面的解决方案似乎有点矫枉过正,我使用了这种方法:
Jenkins
服务java -jar C:\Program Files (x86)\Jenkins\jenkins.war
出于某种原因,我必须在以这种方式启动它时安装所有插件和所有东西,所以我建议创建一个备份,有一个插件可以做到这一点。祝你好运。:)
您仍然需要使用 RDP,但在我的情况下,我们可以在同一 VM 中使用RDP环回。
步骤:
现在您将在一个 VM 中为两个帐户拥有两个 Jenkins 从站
奴隶 1 - 账户 1
奴隶 2 - 账户 2
启用多个 RDP 遵循指南 https://www.serverwatch.com/server-tutorials/how-to-enable-concurrent-remote-desktop-sessions-in-windows.html
在slave 2(账号2)中,运行rdp命令连接slave 1(账号1),如下 Start /b "" "C:\RDP\rdp.exe" /v: 127.0.0.2 /domain:\ /u:admin /p:xxxx /全屏 /w:1920 /h:1200
127.0.0.2很重要,它是RDP的环回连接
将上述命令放入名称为“OpenRDP_ToVMXXX”的 Jenkins 作业中,然后您可以在启用 GUI 的从属 1 上运行任何测试,享受。