CruiseControl.Net con git build falla cuando se ejecuta como un service

Recientemente cambiamos a git para nuestras necesidades de control de fuente. Hemos estado usando cruisecontrol.net por un time. Creé nuevas tareas dentro del file de configuration de cc.net y configuré el control con un bloque de control de fuente git. Me he asegurado de poder usar git sobre ssh a través de la línea de command. Tengo cruisecontrol.net funcionando bien cuando lo ejecuto desde la console.

Sin embargo, tan pronto como ejecuto cruisecontrol.net como service, la captura de git (o clon) expira. Intenté crear una tarea para ejecutar el process cc.exe al iniciar la computadora, pero los resultados son los mismos que cuando se ejecuta como un service. Establecí las variables de entorno en la documentation de cc.net para usar git y configuré ssh y guardé el host, etc. para bitbucket. El service se está ejecutando como el mismo usuario que estoy ejecutando en la console.

¿Alguna idea de cómo ejecutar git como un service?

Script de compilation de ejemplo

<project name="******* Develop" queue="Q1" queuePriority="1"> <webURL>http://cc.*******two.co.uk/server/local/project/*******Develop/ViewLatestBuildReport.aspx</webURL> <workingDirectory>D:\Integration\********* Develop\WorkingDirectory</workingDirectory> <artifactDirectory>D:\Integration\********* Develop\Artifacts</artifactDirectory> <modificationDelaySeconds>10</modificationDelaySeconds> <triggers> <intervalTrigger seconds="600" name="continuous" /> </triggers> <sourcecontrol type="git"> <repository>git@bitbucket.org:*******/*******-2.git</repository> <branch>develop</branch> <autoGetSource>true</autoGetSource> <executable>C:\Program Files\Git\cmd\git.cmd</executable> <tagOnSuccess>false</tagOnSuccess> <commitBuildModifications>false</commitBuildModifications> <commitUntrackedFiles>false</commitUntrackedFiles> <committerName>*******BuildServer</committerName> <committerEMail>devserver@*******.co.uk</committerEMail> <workingDirectory>D:\Integration\*******Develop\WorkingDirectory</workingDirectory> <timeout>300000</timeout> </sourcecontrol> <tasks> <exec> <executable>e2prebuild.bat</executable> <baseDirectory>D:\Integration\*******Develop\Scripts</baseDirectory> <buildTimeoutSeconds>30</buildTimeoutSeconds> </exec> <msbuild> <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable> <workingDirectory>D:\Integration\*******Develop\WorkingDirectory</workingDirectory> <projectFile>*********.sln</projectFile> <buildArgs>/p:Configuration=Release /v:diag</buildArgs> <targets>Build</targets> <timeout>900</timeout> <logger>D:\CruiseControl\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger> </msbuild> <exec> <executable>e2deploy.bat</executable> <baseDirectory>D:\Integration\*******Develop\Scripts</baseDirectory> <buildTimeoutSeconds>900</buildTimeoutSeconds> </exec> <exec> <executable>ecrondeploy.bat</executable> <baseDirectory>D:\Integration\*******Develop\Scripts</baseDirectory> <buildTimeoutSeconds>900</buildTimeoutSeconds> </exec> </tasks> </project> 

Registro desde CC.Net en la compilation fallida

 <cruisecontrol project="********* Develop"> <request source="*********DEV" buildCondition="ForceBuild">Build (ForceBuild) triggenetworking from *********DEV</request> <parameters> <parameter name="$CCNetArtifactDirectory" value="D:\Integration\********* Develop\Artifacts" /> <parameter name="$CCNetBuildCondition" value="ForceBuild" /> <parameter name="$CCNetBuildDate" value="2012-01-26" /> <parameter name="$CCNetBuildTime" value="15:10:27" /> <parameter name="$CCNetFailureUsers" value="System.Collections.ArrayList" /> <parameter name="$CCNetIntegrationStatus" value="Unknown" /> <parameter name="$CCNetLabel" value="3" /> <parameter name="$CCNetLastIntegrationStatus" value="Success" /> <parameter name="$CCNetListenerFile" value="D:\Integration\********* Develop\Artifacts\********* Develop_ListenFile.xml" /> <parameter name="$CCNetModifyingUsers" value="System.Collections.ArrayList" /> <parameter name="$CCNetNumericLabel" value="3" /> <parameter name="$CCNetProject" value="********* Develop" /> <parameter name="$CCNetProjectUrl" value="http://cc.*********.co.uk/server/local/project/*********Develop/ViewLatestBuildReport.aspx" /> <parameter name="$CCNetRequestSource" value="*********DEV" /> <parameter name="$CCNetUser" value="" /> <parameter name="$CCNetWorkingDirectory" value="D:\Integration\********* Develop\WorkingDirectory" /> </parameters> <modifications /> <integrationProperties> <CCNetArtifactDirectory>D:\Integration\********* Develop\Artifacts</CCNetArtifactDirectory> <CCNetBuildCondition>ForceBuild</CCNetBuildCondition> <CCNetBuildDate>2012-01-26</CCNetBuildDate> <CCNetBuildTime>15:10:27</CCNetBuildTime> <CCNetFailureUsers /> <CCNetIntegrationStatus>Exception</CCNetIntegrationStatus> <CCNetLabel>3</CCNetLabel> <CCNetLastIntegrationStatus>Success</CCNetLastIntegrationStatus> <CCNetListenerFile>D:\Integration\********* Develop\Artifacts\********* Develop_ListenFile.xml</CCNetListenerFile> <CCNetModifyingUsers /> <CCNetNumericLabel>3</CCNetNumericLabel> <CCNetProject>********* Develop</CCNetProject> <CCNetProjectUrl>http://cc.*********.co.uk/server/local/project/*********Develop/ViewLatestBuildReport.aspx</CCNetProjectUrl> <CCNetRequestSource>*********DEV</CCNetRequestSource> <CCNetWorkingDirectory>D:\Integration\********* Develop\WorkingDirectory</CCNetWorkingDirectory> <LastIntegrationStatus>Success</LastIntegrationStatus> <LastSuccessfulIntegrationLabel>3</LastSuccessfulIntegrationLabel> <LastModificationDate>25/01/2012 15:15:29</LastModificationDate> </integrationProperties> <build date="2012-01-26 15:10:27" buildtime="00:05:01" buildcondition="ForceBuild" /> <exception><![CDATA[ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control operation has timed out. at ThoughtWorks.CruiseControl.Core.Sourcecontrol.ProcessSourceControl.Execute(ProcessInfo processInfo) at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.GitFetch(IIntegrationResult result) at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.CreateUpateLocalRepository(IIntegrationResult result) at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.GetModifications(IIntegrationResult from, IIntegrationResult to) at ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModifications(ISourceControl sourceControl, IIntegrationResult lastBuild, IIntegrationResult thisBuild) at ThoughtWorks.CruiseControl.Core.IntegrationRunner.GetModifications(IIntegrationResult from, IIntegrationResult to) at ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest request)]]></exception> </cruisecontrol> 

Versión CruiseControl.net: 1.5.7256.1

Cuando he experimentado esto, ha sido porque git está pidiendo input en la console. El service CCNet generalmente se ejecuta con privilegios más altos (que un usuario con session iniciada habitual), así que intente ejecutar Git Bash como administrador, ejecute git clone ... y asegúrese de que no haya indicaciones que debe omitir en la console. Además, verifique que realmente se está ejecutando como el usuario del service; todas las keys SSH y los hosts conocidos se guardan por usuario.

Me encontré con un problema similar con Cruise Control, pero para mí estaba ejecutando un file por lotes para ejecutar todas mis declaraciones de git, que se agotaba, pero solo cuando se activaba desde Cruise Control. Iniciar session como usuario y ejecutar el file por lotes trabajado manualmente sin ningún problema. Mi file de process por lotes ejecutaba un script de compilation, que incluía pasos para iniciar algunas secuencias de commands de git bash shell para ejecutar mis commands de git.

Por ejemplo, mi process de compilation ejecutaría esta statement:

 "c:\program files\git\git.exe" --login -i "myshellscript.sh" 

La secuencia de commands del shell realizaría un poco de lógica para limpiar los directorys, verificar la bifurcación especificada o la key hash, notas de inserción, etc. Esto se colgaría después de hacer la primera búsqueda, y es porque el directory $ HOME en git bash era diferente entre cuando CC se lanzaría como un service y desde cuándo lo haría con el uso de escritorio remoto. Para confirmar, agregué una statement a "myshellscript.sh"

 echo $HOME 

Esto me devolvió una ruta diferente a la que tuve cuando ingresé como usuario de escritorio, por lo que no encontré mis files key ssh, lo que estaba causando que cualquier búsqueda de git se cuelgue a la espera de una respuesta del usuario. Encontré esta guía para configurar un git portátil, e incluye pasos para especificar tu propio perfil de inicio manualmente. Para hacer esto, encuentre dónde se instaló git y edite el file etc \ profile. Cambiar las líneas:

 # normalize HOME to unix path HOME="$(cd "$HOME" ; pwd)" 

A:

 # normalize HOME to unix path HOME="/c/Build Server/MyProfile" HOME="$(cd "$HOME" ; pwd)" 

Ok, con la ayuda de Bradley me di count de que mi service se estaba ejecutando en un perfil diferente a pesar de que el nombre de usuario era el mismo. La ejecución de git bash como administrador (pero sigue siendo el mismo usuario) me mostró que mi ~ / carpeta estaba en windows \ system32 \ systemprofile. Acabo de copyr la carpeta de perfil .ssh que había creado anteriormente en esa carpeta, parece estar funcionando bien ahora.