36

我在窗口 7 上设置了 jenkins 代理,在 Linux 上设置了 jenkins 服务器。我正在 Windows 代理上运行 GUI 测试。如果我连接了远程桌面连接,它运行良好,否则失败。我找到了这个链接,Jenkins on Windows and GUI Tests without RDC

但是那里提供的解决方案非常模糊。似乎唯一的解决方案是以某种方式使 Jenkins 服务器始终打开远程桌面连接。但我找不到这样的选择。谁能清楚地教我如何解决这个问题?

非常感激!

4

6 回答 6

27

您的从机必须在桌面上才能正常运行测试。我们遇到了同样的问题。

解决方案是让测试机器启动并自动登录到桌面。为了确保测试仅在桌面可用后开始,我们添加了一个计划任务,设置为在用户登录时运行,这将通过 Java Web Start 启动 Jenkins 从站。这样,Jenkins 只会在桌面运行时看到从属服务器。之后,一切正常。

这是您链接到的问题的成功答案,并且非常清楚该怎么做。整个设置在 Jenkins 之外。Jason Swager 描述了他如何自动化用户登录到 Windows 桌面计算机,然后在用户会话中启动 Jenkins 从站。

现在一步一步:

1.确保你有一个可用的GUI

解决方案是让测试机器启动并自动登录到桌面

配置标准 Windows 桌面以在 Windows 启动时自动登录特定用户。这样,没有人需要物理登录桌面。(请参阅如何在 Windows 7 中打开自动登录

2.启动Jenkins slave

您需要在此用户设置中启动 Jenkins 从站。否则,Jenkins 从站将无法访问 Windows UI 组件(或者换句话说,无法与桌面交互)。

为了确保测试仅在桌面可用后开始,我们添加了一个计划任务,设置为在用户登录时运行,这将通过 Java Web Start 启动 Jenkins 从站。

因此,您必须创建一个计划任务并将其配置为使用 Java Web Start 启动您的 Jenkins 客户端

3.使用它

这样,Jenkins 只会在桌面运行时看到从属服务器。之后,一切正常。

当 slave 在线时,你可以使用它来运行你的 UI 测试。

于 2013-10-18T14:26:24.007 回答
8

要解决它,请按照我在此处的说明设置 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
于 2014-07-02T11:11:25.897 回答
3

以下事情对我有用:

在 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)。

于 2014-11-28T16:12:31.637 回答
0

我尝试了此处提供的解决方案,但对我没有任何帮助。最后,我想出了一个解决方法。

我在不同的 VM (VM2) 中打开了与 VM 的 RDP 连接。我在 VM2 中打开了第一个连接并断开了连接。

它有效,但这意味着有两个可用的虚拟机。

于 2017-12-29T17:50:01.707 回答
0

由于上面的解决方案似乎有点矫枉过正,我使用了这种方法:

  1. 禁用Jenkins服务
  2. 使用从命令行启动 Jenkinsjava -jar C:\Program Files (x86)\Jenkins\jenkins.war

出于某种原因,我必须在以这种方式启动它时安装所有插件和所有东西,所以我建议创建一个备份,有一个插件可以做到这一点。祝你好运。:)

于 2019-01-04T17:19:28.827 回答
0

您仍然需要使用 RDP,但在我的情况下,我们可以在同一 VM 中使用RDP环回

步骤:

  1. 在 VM 中,创建两个不同的帐户,并为这两个帐户创建 Jenkins 从站。

现在您将在一个 VM 中为两个帐户拥有两个 Jenkins 从站

奴隶 1 - 账户 1

奴隶 2 - 账户 2

  1. 启用多个 RDP 遵循指南 https://www.serverwatch.com/server-tutorials/how-to-enable-concurrent-remote-desktop-sessions-in-windows.html

  2. 在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 上运行任何测试,享受。

于 2018-05-09T07:32:35.770 回答