ejecutar compilation en cc.net si se incluyen palabras definidas en un logging de compromiso

Tengo un sistema de:

  • svn – versión de control
  • cc.net – como server ci
  • msbuild – como un sistema de compilation
  • nunit – para la testing de lanzamiento
  • webdriver: para testings web.

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

Investigué desencadenadores de cc.net pero es para otros objectives. Intento encontrar algo de información sobre los loggings de análisis de cc.net, pero esto no tuvo un resultado positivo.

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

En la configuration de 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 de SVN a un file.

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 Nant después de la tarea del networkingactor de modificaciones.

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

El siguiente código es un ejemplo del uso de la secuencia de commands C # en Nant. SearchFile abre un file, lo lee en una cadena y comtesting si hay un valor en la cadena. Devuelve "sí" o "no". La siguiente secuencia de commands 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> 

Como indican los votos arriba de la pregunta, este parece ser un tema más importante. Voy a intentarlo: por lo que entiendo la configuration, CCNET es el líder del package , supervisa SVN para los cambios de código fuente, obtiene las fonts, lo que hace que MSBuild las cree y desencadena NUnit y WebDriver para ejecutar testings de unidad y web .

La decisión de ejecutar las testings 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.

Entonces, en primer lugar, 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 logging de modificaciones de CCNET. ¿Puedes verificar esto?

Luego, la ejecución de las testings debe hacerse condicional. La configuration de CCNET es algo bastante estático. Concedido con el advenimiento de DynamicValues en CCNET 1.5 y ConditionalTasks en CCNET 1.6, la configuration se hizo más dinámica y ahora también se tiene control en CCNET, pero como soy un tanto pasado de moda, recomendaría envolver la ejecución de testing en un script de construcción utilizando, por ejemplo, MSBuild o NAnt y poner la evaluación del logging de modificación allí.

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