2012-04-30 17 views
5

tengo sistema de:plazo construir sobre cc.net si las palabras definidas están incluidos en un registro de confirmación

  • SVN - versión de control
  • cc.net - como servidor ci
  • msbuild - como una sistema de compilación
  • nunit - para la prueba de lanzamiento
  • webdriver - para pruebas en la web.

Ahora mis pruebas se ejecutan automáticamente después de cada confirmación. Pero quiero que mi prueba se ejecute si commit tiene el comentario #runautotest (u otro).

Investigé los desencadenantes de cc.net pero tiene otros objetivos. Intento encontrar algo de información sobre los registros de análisis de cc.net, pero esto no tuvo un resultado positivo.

¿Qué tipo de formas debo usar para resolver mi problema?

Respuesta

3

En la configuración CCNet, en el proyecto, en la parte superior del bloque de tareas:

<modificationWriter> 
<filename>svn_mods.xml</filename> 
<path>c:\modsdir</path> 
</modificationWriter> 

Esto escribirá las modificaciones SVN a un archivo.

siguiente en el bloque de tareas:

<nant> 
<executable>c:\path_to_nant</executable> 
<buildFile>mybuildfile.build</buildFile> 
<targetList> 
    <target>conditionally_run_nunit_tests</target> 
</targetList> 
</nant> 

Esto ejecutará una tarea después de la tarea Nant modificationwriter.

En conditionally_run_nunit_tests, busque el archivo de c: \ modsdir \ svn_mods.xml para #runautotest.Si lo encuentras, ejecuta las pruebas. Si no lo encuentras, no hagas nada. Hay varias formas de analizar el archivo de modificaciones. Podría usar la secuencia de comandos C# para leer todo el archivo en una cadena y luego llamar a Contiene pasando en #runautotest.

El siguiente código es un ejemplo del uso de la secuencia de comandos C# en Nant. SearchFile abre un archivo, lo lee en una cadena y comprueba si hay un valor en la cadena. Devuelve "sí" o "no". La siguiente secuencia de comandos no ha sido probada.

<property name="yesno" value="${ns::SearchFile("c:\modsdir\svn_mods.xml", "#runautotest")}"/> 

<script language="c#" prefix="ns"> 
    <references> 
     <include name="System"/> 
     <include name="System.IO"/> 
    </references> 
    <code> 
    <![CDATA[ 
    [Function("SearchFile")] 
    public static string SearchFile(string filepath, string token) 
    { 
     System.IO.StreamReader myFile = new System.IO.StreamReader(filepath); 
     string myString = myFile.ReadToEnd(); 
     myFile.Close(); 
     if(myString.Contains(token)) return "yes"; 
     else return "no"; 
    }    
    ]]> 
    </code> 
</script> 
+0

+1 para la respuesta muy completa. – TridenT

+0

Gracias !!!!!!!!!!! –

0

Como indican los votos expresos de la pregunta, este parece ser un problema más importante. Voy a intentarlo: por lo que entiendo la configuración, CCNET es el leader of the pack, supervisa el SVN para ver los cambios en el código fuente, obtiene los orígenes, lo que hace que MSBuild los construya y activa NUnit y WebDriver para ejecutar pruebas unitarias y web.

La decisión sobre si ejecutar las pruebas o no depende de un hashtag definido en los comentarios de modificación de SVN. SVN, por un lado, y NUnit y WebDriver, por el otro, están acoplados solo a través de CCNET.

Así que antes que nada, me gustaría asegurar que este hashtag que contenga comentarios esté disponible en algún lugar de CCNET. No soy un experto en SVN, pero supongo que todos los comentarios están en el registro de modificaciones de CCNET. ¿Puedes verificar esto?

A continuación, la ejecución de las pruebas debe hacerse condicional. La configuración de CCNET es algo bastante estático. Otorgado con el advenimiento de DynamicValues en CCNET 1.5 y ConditionalTasks en CCNET 1.6, la configuración se hizo más dinámica y ahora también se tiene un flujo de control en CCNET, pero como soy algo pasado de moda, recomendaría envolver la ejecución de prueba en un script de construcción usando por ejemplo MSBuild o NAnt y poner evaluación de registro de modificaciones allí.

Actualización: Eche un vistazo a Adam's answer. Este ejemplo es bastante cercano a lo que tenía en mente (aunque hubiera usado <xmlpeek> en lugar de <script>).

Cuestiones relacionadas