2009-12-01 91 views
5

有沒有辦法在Cruise Control .NET內部進行fork進程?我希望CC .NET在一切都完成時啓動一個程序,但是現在,CC .NET堅持在程序完成之前等待程序關閉。用CC .NET進行叉進程

啓動的程序一次最多可運行數週。

回答

5

我會這樣做的方式是使用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> 
1

將該程序的啓動放入一個單獨的CCNET項目中,並將ForceBuildPublisher添加到原始項目中。

<project name="OriginalProject"> 
    <!-- ... --> 
    <publishers> 
    <!-- ... --> 
    <forcebuild> 
     <project>LaunchProgram</project> 
    </forcebuild> 
    </publishers> 
</project> 
+0

不幸的是,CC .NET超時並在一段時間後終止了這個過程。 – 2009-12-03 00:01:29

2

這個怎麼樣?2的小程序

1)運行所有的處理時間(也許是一個Windows服務?),並在TCP套接字上偵聽,當它獲得連接時,執行你的3周過程。

2)一個進程可以被CC.NET調用,並打開一個tcp連接來處理#1,然後退出。

您可以使用任何形式的進程間通信,但TCP套接字很容易且可靠。

0

我還沒有嘗試使用PowerShell(選定的答案)的解決方案,但我使用紅寶石耙和任何我試圖分叉獨立進程組與Ruby庫,CruiseControl STILL INSIST等待異步過程完成。

對我而言;只有這樣,才能與CCNET成功叉獨立的守護進程/服務器應用程序使用任務調度器(https://stackoverflow.com/a/14679992/423356

所以使用SchTasks.exe會創造一次任務暴殄天物運行開始你的過程

你可以調用的schtasks和動態使用批處理文件,ruby rake或PowerShell設置開始時間。