2009-12-01 2 views
5

Cruise Control .NET 내부에서 프로세스를 포킹 할 수있는 방법이 있습니까? 모든 일이 끝났을 때 CC .NET이 프로그램을 시작하기를 원하지만 CC .NET은 프로그램이 완료 될 때까지 기다리지 말고 빌드가 완료되었다고 말합니다.CC.NET을 사용한 포크 프로세스

실행되는 프로그램은 한 번에 최대 몇 주 동안 실행되어야합니다.

답변

5

나는 PowerShell 또는 배치 스크립트를 사용합니다. 이 스크립트는 프로세스를 시작하고 실행 파일을 생성 한 후 정상적으로 CC.NET으로 되돌릴 수 있습니다. 이것이 CC.NET이 리턴 된 것을 알 필요가 있고 스크립트가 돌아가는 것을 알 필요가 있기 때문에 이것이 실행되는 것을 볼 수있는 유일한 방법입니다. 원하는대로 수행 할 수있는 샘플 PowerShell 스크립트. 그런 다음 매개 변수로 exe에 대한 경로가있는 powershell 스크립트를 호출하면됩니다. 여기 CC.NET 1.5에

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

Invoke-Item $exePath 

은 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은 시간이 초과되어 프로세스를 종료합니다. –

2

이 방법에 대해 ... 2 개 작은 프로그램

1) 모든 실행 프로세스를 설정하는 방법이 될 것입니다 시간 (어쩌면 Windows 서비스?), 그리고 연결을 얻을 때, TCP 소켓에서 수신 대기, 3 주 과정을 실행합니다.

2) CC.NET에서 호출 할 수 있고 프로세스 # 1에 대한 tcp 연결을 연 후 종료합니다.

모든 프로세스 간 통신 형식을 사용할 수 있지만 TCP 소켓은 쉽고 안정적입니다.

0

필자는 powershell (선택한 답변)으로 솔루션을 시도하지는 않았지만 루비 레이크를 사용하고 루비 라이브러리가있는 독립적 인 프로세스 그룹을 포크하려했으나 CruiseControl은 비동기 프로세스가 완료 될 때까지 기다렸습니다.

나를 위해; 유일한 방법은 프로세스를 시작하는 작업을 한 번 쓰고 버리는 실행을 만들 수 있도록 함께 Schtasks.exe를 사용하여 작업 스케줄러 (https://stackoverflow.com/a/14679992/423356)

을 사용 CCNET 성공적으로 독립적 인 데몬 프로세스/서버 응용 프로그램을 포크로 당신이합니다 schtasks를 호출 할 수 있습니다

및 배치 파일, 루비 레이크 또는 powershell을 사용하여 동적으로 시작 시간을 설정하십시오.