Jenkins Windows从机服务无法与桌面交互。

15
我按照这篇指南在Windows 8上安装了Jenkins从机服务:https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Windows+service#InstallingJenkinsasaWindowsservice-InstallSlaveasaWindowsservice%28需要.NET2.0框架%29。我需要运行一个与桌面交互的作业(例如运行打开浏览器的应用程序)。因此,在将从机安装为服务后(通过从主机下载的jnlp运行),我更改了“登录”的服务以“允许与显示器交互”。由于某种原因,只能启用“Local System Account”帐户,尽管建议使用指定用户(例如jenkins)运行服务。但是,当我执行该作业时,没有任何反应,浏览器也未打开。如果停止服务并仅通过jnlp文件启动从机,则作业可以正常运行-浏览器会打开。有人能成功地在运行Jenkins Windows从机服务时与桌面交互吗?

我需要运行一些与桌面交互的作业(例如打开浏览器等)。我非常确定可以在没有桌面的情况下打开浏览器。 - ta.speot.is
当我通过jnlp启动从节点时,它可以正常工作。但是当它作为服务启动时就不行了。因此,当它作为服务运行时,某些东西的工作方式并不相同。 - u123
1
你可以尝试将处理浏览器的组件移动到 Selenium 中,它专门用于测试网站的用户界面,http://docs.seleniumhq.org/。 - KeepCalmAndCarryOn
7个回答

10

自Vista以来,服务在Session 0中运行,而第一个用户现在在Session 1中。 因此您不能再进行交互了。这被称为Session 0隔离。

微软在这里这里对此进行了解释。您必须使用第二个程序,该程序使用IPC与服务通信。


8
为了解决这个问题,首先按照我在这里解释的方式创建Windows自动登录: https://serverfault.com/questions/269832/windows-server-2008-automatic-user-logon-on-power-on/606130#606130 然后为Jenkins代理创建一个启动批处理文件(将其放置在Jenkins目录中)。这将在桌面上启动代理控制台,并应该允许Jenkins与Windows GUI交互:
java -jar slave.jar -jnlpUrl http://{Your Jenkins Server}:8080/computer/{Your Jenkins Node}/slave-agent.jnlp

(slave.jar可以从http://{您的Jenkins服务器}:8080/jnlpJars/slave.jar下载)

编辑: 如果您遇到黑屏截图(例如在使用Selenium或Sikuli时),请创建一个批处理文件来断开远程桌面连接,而不是使用常规X按钮关闭RDP会话:

%windir%\system32\tscon.exe %SESSIONNAME% /dest:console 

1
我在services.msc中禁用了我的Jenkins服务,并使用类似的Java命令通过cmd启动了我的Jenkins从节点,这解决了我的会话0锁定问题。我发现,当您禁用服务然后查看Jenkins Web UI中的从节点时,它应该显示“连接已断开”,并在页面底部显示您需要在cmd中使用的确切命令以及所需的slave.jar的下载链接。该命令似乎有一些特定于您的设置的其他参数。 - Anastasya Lundquist
我也是。我将一个简单的脚本放入自启动中。为了摆脱cmd窗口(烦恼,意外关闭,...),使用类似于hidecon的东西(http://code.kliu.org/misc/hidecon/)。 - Peter Schneider
我不理解"java"行的部分。你如何用这个命令替换正常的remoting.jar启动?你说的"获取slave.jar"是什么意思,只需要下载一次就可以了吗?如果你把任何东西放在Jenkins文件夹中,Jenkins会如何寻找它等等?对我来说有很多未解决的问题。 - IceFire
@IceFire,这是如何使用自己的脚本运行Jenkins代理而不是使用Windows服务的方法。因此,请禁用Jenkins服务,并在您的脚本中调用下载的jar文件。 - Noam Manos

8

我在Windows上使用服务运行Jenkins时遇到了很多问题。相反,我现在禁用了服务并从CMD中运行它。

因此打开CMD

cd C:\Program Files (x86)\Jenkins

java -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar
jenkins.war --httpPort=9091

这对我很有效,如果你问我的话,这应该是被接受的答案。但是,另一方面,我真的喜欢简单的答案。我尝试了几个小时在Windows XP Home中启用桌面交互来运行Jenkins,但是没有成功。所以我只是从CMD(在StartUp文件夹中的批处理文件)中运行它,它就像微风一样运行。如果你问我的话,在WinXP中设置启用桌面交互的服务是不值得的,但是,另一方面,我在HyperV VM中运行Jenkins,因此我已经启用了实际形式的“桌面分离”。此外,作为奖励,只需将Putty SSH密钥添加到StartUp文件夹中,您就可以使用Mercurial了。 - dotz

0
考虑在启动时直接运行Java从服务器,然后使用某些工具来监视和重新启动服务器(例如Kiwi Restarter)。

0
请检查服务(@ TestNode),确保“交互式服务检测”服务已启动,默认情况下启动类型设置为手动,您可能也希望将其设置为自动。

enter image description here

服务启动后,在测试节点中运行测试时,您将看到类似于以下内容的信息: enter image description here

单击它并选择查看消息

enter image description here

你会在那里看到活动发生。希望这有所帮助 :D

注意:如果使用其他账户登录并且无法查看交互式服务检测提示,请再次启动服务。


我们能与真实的窗口进行交互吗? - Sagar007

0

我的Jenkins服务以用户“jenkins”身份运行,我所做的就是在以下位置创建桌面文件夹:C:\Windows\system32\config\systemprofile\desktop,如果是64位的Windows系统,则还需在C:\Windows\SysWOW64\config\systemprofile\desktop中创建 - 然后它就可以完美运行。


0

请确保创建桌面文件夹如下:

  • %WINDOWS%/System32/config/systemprofile/Desktop
  • %WINDOWS%/SystemWOW64/config/systemprofile/Desktop

在运行某些Java软件作为服务时,这些文件夹的存在有时是必需的。


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