2010-12-02 20 views
7

Estoy intentando configurar CruiseControl.NET 1.5.7256.1 para compilaciones automáticas. Mi proyecto se almacena en Mercurial, y estoy usando el siguiente ccnet.config:Cómo hacer que CruiseControl.NET trabaje con Mercurial: "Error de control de fuente (GetModifications)"

<cruisecontrol xmlns:cb="urn:ccnet.config.builder"> 
    <project name="Slider" webURL="http://localhost/ccnet"> 
     <triggers> 
      <intervalTrigger seconds="3600" /> 
     </triggers> 
     <sourcecontrol type="hg" autoGetSource="true"> 
      <executable>C:\Python26\Scripts\hg.bat</executable> 
      <repo>c:\repos\slider</repo> 
      <workingDirectory>c:\ccnet\slider</workingDirectory> 
     </sourcecontrol> 
     <tasks> 
      <msbuild> 
       <executable>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe</executable> 
       <workingDirectory>c:\ccnet\slider</workingDirectory> 
       <projectFile>Slider.sln</projectFile> 
       <buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs> 
       <targets>Slider</targets> 
       <timeout>900</timeout> 
       <logger>C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger> 
      </msbuild> 
     </tasks> 
    </project> 
</cruisecontrol> 

Pero cuando fuerzo una acumulación, me sale este error:

[Slider:WARN] Source control failure (GetModifications): Source control operation failed: < was unexpected at this time. 
. Process command: C:\Python26\Scripts\hg.bat log -r 0:123 --template <modification><node>{node|short}</node><author>{author|user}</author><date>{date|rfc822date}</date><desc>{desc|escape}</desc><rev>{rev}</rev><email>{author|email|obfuscate}</email><files>{files}</files></modification> --noninteractive 
[Slider:INFO] Integration complete: Exception - 12/2/2010 1:19:08 PM 

El error es presumiblemente causada por la no indicada paréntesis angulares en el parámetro --template, pero ¿cómo puedo hacer que CC.NET ponga comillas alrededor de ese parámetro?

===============

Aquí es hg.bat:

@echo off 
rem Windows Driver script for Mercurial 

setlocal 
set HG=%~f0 

rem Use a full path to Python (relative to this script) as the standard Python 
rem install does not put python.exe on the PATH... 
rem %~dp0 is the directory of this script 

%~dp0..\python "%~dp0hg" %* 
endlocal 
+0

¿Cómo son los contenidos de hg.bat? – bluevoodoo1

+0

Llama al intérprete de Python para ejecutar Hg. IIRC fue creado por el instalador del paquete Python. Puedo publicar los contenidos el lunes. –

+1

Bueno, terminé cambiando a TeamCity, que funciona muy bien con Hg y también es fácil de configurar. Sería bueno saber qué estaba mal con CC.NET. –

Respuesta

3

estoy usando con éxito CruiseControl.NET 1.5.7256.1 con Mercurial instalado desde esto msi, usando la ruta completa de hg.exe como el valor executable.

En project\core\sourcecontrol\Mercurial\Mercurial.cs la plantilla se utiliza como esto:

buffer.AddArgument("--template", HistoryTemplate) 

y se formateará para la línea de comando como este:

string.Format("{0}{1}{2}", arg, separator, StringUtil.AutoDoubleQuoteString(value)) 

donde el separador es " ", y AutoDoubleQuoteString citará la plantilla , por lo que esta no puede ser la causa del error.

ACTUALIZA 1

En realidad, debería AutoDoubleQuoteString cita de la plantilla, pero en la versión actual no lo hace. Además, incluso si la compilación tiene éxito al usar hg.exe, ejecutar la línea de comando real en un símbolo del sistema devuelve el mismo error.

ACTUALIZACIÓN 2

CruiseControl.NET 1.6.7981.1 se acaba de publicar (ver release notes), y puesto que la plantilla está ahora pasa como un archivo, funciona muy bien (al menos en mi PC).

+0

Ah, hmm. Debe ser la forma en que tengo Hg instalado, entonces. –

Cuestiones relacionadas