有沒有辦法在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