如何在Jenkins CI中从PowerShell启动/运行exe(console / gui)

时间:2013-06-20 14:53:26

标签: powershell jenkins

我们使用Jenkins和PowerShell在我们的组织内进行大量自动化。它非常适合部署,计划任务,重新启动服务,回收IIS应用程序池等。现在我想用来重新启动在Windows服务器上运行的控制台应用程序。

exe控制台应用程序将启动一个必须在服务器上的用户控制台会话中保持运行的GUI。服务更容易控制,这种方法要求我们总是有一个活动的会话来运行我们通过RDP监控,但是与构建系统的开发人员争论已经太晚了。

Jenkins正在作为服务运行,当我启动一个exe时,即

& 'C:\gui.exe'

它在任务管理器中启动进程,但是没有在会话中启动GUI,所以我可以看到它。詹金斯将报告错误:

  

处理泄露的文件描述符。有关详细信息,请参阅http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build

但该页面没有解释如何定位特定的控制台会话并启动可见的GUI。我错过了什么吗?帮助赞赏...

2 个答案:

答案 0 :(得分:0)

研究让我了解了这个解决方法,但这不是我的问题的答案:

https://wiki.jenkins-ci.org/display/JENKINS/Tomcat

我在这里提供它,因为它将帮助我移动,并希望帮助其他人解决同样的问题,但不能完全解决问题。这说的是不允许Jenkins代理成为Windows服务。当我们离开浏览器弹出式jnlp连接打开时,它适用于在会话中启动GUI,但如果弹出窗口关闭,服务器重新启动等,我们将失去连接并需要手动干预才能再次连接从站。 该部分的解决方案是将jnlp代理启动到Windows Scheduler中以便在登录时运行。或者是偏执并写一个脚本来检查它是否正在运行,如果没有则启动它,然后每隔x分钟在调度程序上运行一次。

正如我所说,这是有效的,但它要求我回过头来环境并改变奴隶代理设置方式,使其不那么健壮。不理想,但它的工作原理。

希望其他人可能有更好的解决方案(尽管Jenkins / Hudson维基页面说它不太可能)。我不是要求一个 Jenkins 解决方案,我正在寻找一个可以让我定位特定控制台会话的PowerShell解决方案,但考虑到PowerShell通过Jenkins运行的独特方式(非交互式shell)。

答案 1 :(得分:0)

我报告了两个问题:没有启动GUI,文件描述符泄漏消息。这是我解决它们的方式。

问题1解决方案。不要推出Jenkins作为服务。但默认情况下,Jenkins使用系统帐户在Windows上安装为服务。但服务无法访问桌面,尤其是。系统帐户,否定正在运行的GUI应用程序。即使选中“允许服务与桌面交互”框也不够,或者更改服务的登录帐户。从命令行启动Jenkins。

问题2解决方案。我做了两件事。首先添加

-Dhudson.util.ProcessTree.disable=true

命令行启动的参数。其次,添加环境变量:

SET BUILD_ID=dontKillMe

我添加到Jenkins工作本身的工作。因此,尽管我有一个关于Jenkins工作的Powershell部分,但我还有一个“执行Windows批处理命令部分”,其中包含我在PRershell部分中放置的SET命令。

BTW这里是完整的命令行,我将其放入批处理文件中:

CD "C:\Program Files (x86)\Jenkins"
java -Dhudson.util.ProcessTree.disable=true  -jar jenkins.war --httpListenAddress=127.0.0.1 --httpPort=8081 

碰巧我在8080上运行其他东西,所以我改变了端口。

希望这有帮助!