2009-12-01 27 views
5

Esiste un modo per eseguire il fork di un processo all'interno di Cruise Control .NET? Voglio che CC .NET avvii un programma quando tutto è fatto ma in questo momento, CC .NET insiste nell'attesa che il programma si chiuda prima di dire che la compilazione è completa.Processo di fork con CC .NET

Il programma avviato deve essere eseguito per un massimo di settimane alla volta.

risposta

5

Il modo in cui lo fare è utilizzare uno script PowerShell o Batch. Lo script può avviare il processo e tornare normalmente a CC.NET dopo aver generato l'eseguibile. Questo è l'unico modo in cui posso vederlo, poiché CC.NET deve sapere che è stato restituito e che lo script può tornare, anche se il processo che hai generato è ancora in esecuzione. Un esempio di script PowerShell che farà ciò che vuoi. Quindi chiami lo script PowerShell con il percorso verso l'exe come paracadutista.

param( [string] $exePath = $(throw "A path to executable required.") 
    ) 

Invoke-Item $exePath 

qui CC.NET 1.5 sarebbe come impostare il compito PowerShell

<powershell> 
    <script>yourScriptName.ps1</script> 
    <scriptsDirectory>D:\CruiseControl</scriptsDirectory> 
    <buildArgs>full path to exe you want to kick-off</buildArgs>  
</powershell> 
1

Inserire il programma in un progetto CCNET separato e aggiungere ForceBuildPublisher al progetto originale.

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

Sfortunatamente, CC .NET scade e uccide il processo dopo un po '. –

2

ne dici di questo ... 2 piccoli programmi

1) un processo che corre tutto il tempo (forse un servizio di Windows?), e ascolta su un socket TCP, quando ottiene una connessione, eseguire il processo di 3 settimane.

2) Un processo che può essere chiamato da CC.NET e apre una connessione TCP al processo n. 1, quindi esce.

È possibile utilizzare qualsiasi forma di comunicazione tra processi, ma i socket TCP sono semplici e affidabili.

0

Non ho provato la soluzione con PowerShell (la risposta selezionata), ma uso ruby ​​rake e qualsiasi cosa ho provato a biforcare gruppo di processi indipendente con la libreria ruby, CruiseControl STILL INSIST in attesa del completamento del processo asincrono.

Per me; L'unico modo per forcella un'applicazione indipendente daemon processo/server con successo con CCNet sta usando task scheduler (https://stackoverflow.com/a/14679992/423356)

in modo da utilizzare schtasks.exe per creare un percorso usa e getta, una volta compito di avviare il processo di

è possibile chiamare schtasks e imposta l'ora di inizio in modo dinamico utilizzando file batch, ruby ​​rake o powershell.