2009-12-01 22 views
5

¿Hay alguna forma de insertar un proceso dentro de Cruise Control .NET? Quiero que CC .NET inicie un programa cuando todo está hecho, pero en este momento, CC .NET insiste en esperar que el programa se cierre antes de decir que la compilación está completa.Proceso de horquillas con CC .NET

El programa que se inicia debe ejecutarse durante hasta semanas a la vez.

Respuesta

5

La forma en que lo haría es utilizar una secuencia de comandos de PowerShell o por lotes. El script puede iniciar su proceso y regresar normalmente a CC.NET después de generar el ejecutable. Esta es la única forma en que puedo verlo, ya que CC.NET necesita saber que se devolvió y que el script puede regresar, incluso con el proceso que engendró y que todavía se está ejecutando. Un script de muestra de PowerShell que hará lo que usted desee. Luego, simplemente llama al script de powershell con la ruta al exe como un parámetro.

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

Invoke-Item $exePath 

aquí en CC.NET 1.5 sería cómo configurar la tarea PowerShell

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

Ponga el lanzamiento del programa en un proyecto separado de CCNET y agregue un ForceBuildPublisher al proyecto original.

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

Desafortunadamente, CC .NET se agota y mata el proceso después de un tiempo. –

2

¿Qué tal esto ... 2 pequeños programas

1) Un proceso que corre todo el tiempo (tal vez un servicio de Windows?), y escucha en un socket tcp, cuando se conecta, ejecute su proceso de 3 semanas.

2) Un proceso al que CC.NET puede llamar, y abre una conexión tcp para procesar # 1 y luego sale.

Puede usar cualquier forma de comunicación entre procesos, pero los sockets TCP son fáciles y confiables.

0

No he intentado la solución con powershell (la respuesta seleccionada), pero utilizo ruby ​​rake y todo lo que intenté bifurcar en un grupo de procesos independiente con la biblioteca Ruby, CruiseControl STILL INSIST esperando que termine el proceso asíncrono.

Para mí; La única forma de tenedor aplicación independiente demonio de proceso/servidor con éxito con CCNET está usando el programador de tareas (https://stackoverflow.com/a/14679992/423356)

a fin de utilizar schtasks.exe para crear una carrera de usar y tirar una vez que la tarea de empezar el proceso de

puede llamar y schtasks establezca la hora de inicio dinámicamente usando el archivo por lotes, rastrillo ruby ​​o powershell.

Cuestiones relacionadas