Después de las pruebas que fuí haciendo con NAnt, jugando con AjGenesis, encontré la forma de automatizar algunas tareas que me parece bueno compartir acá.
Quiero agradecer a Ángel «Java» López y a Claudio Meschini que en más de una ocasión me asistieron con sus generosos aportes, en el marco del Grupo Google CodeGeneration donde nos encontramos un grupo de profesionales con similares inquietudes. Este es un grupo abierto y están todos invitados a participar.
Para quien desconoce NAnt recomiendo la lectura de Introducción a NAnt.
Estos son algunos ejemplos de tareas que pueden ejecutarse dentro de un archivo .build.
- Creación de un directorio virtual en Internet Information Server.
<target name=»CreateVirtualDirectory»>
<mkiisdir
dirpath=»c:/inetpub/wwwroot/Prueba»
vdirname=»Prueba»
failonerror=»false»
/>
</target>
Crea un directorio virtual de nombre Prueba en el directorio c:/inetpub/wwwroot/Prueba.
- Armar un proyecto de tipo Class Library.
<target name=»BuildCore»>
<vbc target=»library» output=»C>/bin/Core.dll» rootnamespace=»Core» >
<imports>
<import namespace=»System» />
<import namespace=»System.Data» />
<import namespace=»System.Xml» />
<import namespace=»Microsoft.Practices.EnterpriseLibrary.Common» />
<import namespace=»Microsoft.Practices.EnterpriseLibrary.Data» />
</imports>
<references>
<include name=»System.dll» />
<include name=»System.Data.dll» />
<include name=»System.Xml.dll» />
<include name=»c:/Resources/Microsoft.Practices.EnterpriseLibrary.Common.dll» />
<include name=»c:/Resources/Microsoft.Practices.EnterpriseLibrary.Data.dll» />
</references>
<sources>
<include name=»c:/Repositories/Core/*.vb» />
</sources>
<resources prefix=»Core» dynamicprefix=»true»>
<include name=»c:/Repositories/Core/*.resx» />
</resources>
</vbc>
</target>
Crea un proyecto de tipo Class Library, crea referencias a System.dll, System.Data, System.Xml, Microsoft.Practices.EnterpriseLibrary.Common y Microsoft.Practices.EnterpriseLibrary.Data, en el caso de estas dos últimas, además indica que las busque en c:/Resources. Además incluye en el proyecto todos los archivos con extensiones .vb y .resx que encuentre en la carpeta c:/Repositories/Core.
- Cambio de carpeta.
<cd dir=»Resources» />
Cambia la carpeta activa a la carpeta Resources, relativa a la carpeta activa actual.
- Ejecutar conjuntos de tareas alternativas.
<choose>
<when Carpeta=»c:/Repositories/Core»>
…
</when>
<when Carpeta=»c:/Repositories/Core2″>
…
</when>
<otherwise>
<fail>Se produjo un error.</fail>
</otherwise>
</choose>
Si existe la carpeta c:/Repositories/Core ejecuta un conjunto de tareas, análogamente para la carpeta c:/Repositories/Core2, si no existe ninguna se muestra un mensaje.
- Registrar una dll.
<comregister file=»miDll.dll» />
- Eliminar un directorio virtual de Internet Information Server.
<deliisdir vdirname=»WebClient» />
- Leer de un archivo .ini.
<iniread property=»miVariable» filename=»Setup.ini» section=»Inicial» key=»Nombre» default=»Carlos»/>
Esta línea lee de un archivo llamado Setup.ini de la section Inicial, la key Nombre, si no la encuentra asume el valor Carlos y lo guarda en la variable miVariable. El archivo Setup.ini se ve de la siguiente manera:
[Inicial]
Nombre=Carlos
- Escribir un valor en un archivo .ini.
<iniwrite filename=»Setup.ini» section=»Inicial» key=»Nombre» value=»Carlos»/>
Para el mismo archivo Setup.ini del caso anterior, en este ejemplo graba el valor Carlos en la key Nombre de la section Inicial.
Además se pueden ejecutar expresiones SQL, comandos svn, crear un setup Windows Installer, ejecutar comandos de Source Safe, validar archivos XML con XSD o XML Schemas, compilar programas hechos en Visual Basic 6 y mucho más.
Existen funciones para determinar cuantos archivos hay en una carpeta, definir si un archivo existe dentro de un conjunto de archivos, obtener una lista de archivos como un string delimitado, obtener el estado de un determinado servicio, su nombre, su friendly name y sigue la lista…
Si hacen un recorrido por los links que recomiendo en la nota Introducción a NAnt van a poder apreciar la magnitud de este proyecto que no deja de crecer.
A esta altura se les debe estar ocurriendo una pila de aplicaciones con NAnt, cada uno en su especialidad puede comenzar a automatizar tareas repetitivas con un grado de elasticidad alto.
Espero que se beneficien con esto y se animen a dejar un comentario. 🙂
3 comentarios
Comments feed for this article
miércoles 14 \14-03:00 May \14-03:00 2008 a 12:05:54
José Franco
[…]
jueves 26 \26-03:00 marzo \26-03:00 2009 a 20:03:08
HECTOR
Hola soy nuevo en esto de Nant y quiero utilizarlo para que me genere los builds de una aplicacion, como le hago para hacerlo, claro empezando desde 0, pues este blog esta interesante pero no me dice como inicializarlo.
para esto estoy trabajando con VS 2008 Y POR LO TANTO CON FRAME WORK 3.5
Espero obtener respuesta, así como ayuda
De Antemano gracias
lunes 30 \30-03:00 marzo \30-03:00 2009 a 17:03:17
Carlos Marcelo Santos
Gracias por tu comentario.
Justamente Héctor, la idea del post, fue mostrar qué posibilidades encontré en NAnt, mientras veía cómo ponerlo a andar al servicio de AjGenesis.
Son sólo planteos sin pretensión de agotar ninguno de los temas.
El dia a dia de mi trabajo no me deja tiempo para escribir, te pido disculpas.
De todos modos, si tu idea es hacer builds en equipos que no cuentan con Visual Studio o automatizar builds, yo te recomendaría que vayas por MSBuild, http://msdn.microsoft.com/es-es/library/0k6kkbsd(VS.80).aspx, quizá sufras algo menos… 🙂
Saludos.