有没有办法在Cruise Control .NET内部进行fork进程?我希望CC .NET在一切都完成时启动一个程序,但是现在,CC .NET坚持在程序完成之前等待程序关闭。用CC .NET进行叉进程
启动的程序一次最多可运行数周。
有没有办法在Cruise Control .NET内部进行fork进程?我希望CC .NET在一切都完成时启动一个程序,但是现在,CC .NET坚持在程序完成之前等待程序关闭。用CC .NET进行叉进程
启动的程序一次最多可运行数周。
我会这样做的方式是使用PowerShell或批处理脚本。该脚本可以启动您的进程并在产生可执行文件后正常返回到CC.NET。这是我看到做这件事的唯一方式,因为CC.NET确实需要知道它返回并且脚本可以返回,即使您生成的进程仍然在运行。一个示例PowerShell脚本,可以做你想做的事情。然后,您只需以exerate的路径作为参数调用powershell脚本即可。
param( [string] $exePath = $(throw "A path to executable required.")
)
Invoke-Item $exePath
这里CC.NET 1.5将如何设置PowerShell的任务
<powershell>
<script>yourScriptName.ps1</script>
<scriptsDirectory>D:\CruiseControl</scriptsDirectory>
<buildArgs>full path to exe you want to kick-off</buildArgs>
</powershell>
将该程序的启动放入一个单独的CCNET项目中,并将ForceBuildPublisher添加到原始项目中。
<project name="OriginalProject">
<!-- ... -->
<publishers>
<!-- ... -->
<forcebuild>
<project>LaunchProgram</project>
</forcebuild>
</publishers>
</project>
这个怎么样?2的小程序
1)运行所有的处理时间(也许是一个Windows服务?),并在TCP套接字上侦听,当它获得连接时,执行你的3周过程。
2)一个进程可以被CC.NET调用,并打开一个tcp连接来处理#1,然后退出。
您可以使用任何形式的进程间通信,但TCP套接字很容易且可靠。
我还没有尝试使用PowerShell(选定的答案)的解决方案,但我使用红宝石耙和任何我试图分叉独立进程组与Ruby库,CruiseControl STILL INSIST等待异步过程完成。
对我而言;只有这样,才能与CCNET成功叉独立的守护进程/服务器应用程序使用任务调度器(https://stackoverflow.com/a/14679992/423356)
所以使用SchTasks.exe会创造一次任务暴殄天物运行开始你的过程
你可以调用的schtasks和动态使用批处理文件,ruby rake或PowerShell设置开始时间。
不幸的是,CC .NET超时并在一段时间后终止了这个过程。 – 2009-12-03 00:01:29