sábado, mayo 14, 2005

Día 0.1 : First Step

Prólogo
Un largo camino comienza con el primer paso....

O algo así ;-)

Comencé a las 21:35 (quiero cumplir con mi restricción de recursos, aunque probablemente al principio tenga que gastar más).

Objetivo del día: Que el código fuente esté administrado (Subversion), que compile en Mono, que la generación sea automática (NAnt) y que la integración sea permanente (CruiseControl.NET)

Paso 1: Creación del directorio en Subversión

Mediante Tortoise SVN no es muy diferente a utilizar Source Safe (o CVS con Tortoise CVS ;-) ), el repositorio ya lo había creado previamente. Lo malo, hasta ahora lo he utilizado haciendo referencia al directorio, no utilizando el esquema de Cliente/Servidor, pues para eso habría requerido Apache, y tampoco quiero instalar tantas cosas en esta máquina (cuyo primer objetivo es servir para procesamiento de Fotos y Películas, no para este tipo de tareas).

Conclusión: Instalar en Saruman o en Faramir la versión de Subversión para Linux y utilizarlo con Apache, debiese resultar más efectivo que CVS para algunas tareas, en particular para el manejo de los branchs, pero eso es tema para otro día.

Paso 2: Creación del archivo inicial

No he instalado #Develop (pensé en bajar MonoDevelop, que es el port a Mono, pero sólo corre en Linux, sobre GNOME, me imagino que en Saruman o Faramir lo voy a instalar para probarlo), ni tengo Visual Studio .NET, ni WebMatrix, asi que no me queda otra que utilizar Notepad++ (un editor de texto con algunas cosas interesantes, como pestañas y manejo de sintáxis de algunos lenguajes, como C#, y que instalé para editar algunos archivos XML).

Paso 3: Compilación a mano

No hacía esto desde hace mucho tiempo ;->

Primero tengo que ver el tema de las variables de entorno... mcs no está en el path. Pero en la distribución de Mono está un bat (mcs.bat) que declara las variables correspondientes y ejecuta mcs sobre la máquina virtual de Mono.

Obviamente el primer intento es fallido:

mcs.bat main.cs --> me aparece un mensaje de error.

Reviso el código, realmente con VS.NET uno se pone flojo, busco un tutorial de C# y veo que mi código inicial era muy ingenuo, lo que VS.NET crea por defecto hay que implementarlo de 0 (creo que si voy a instalar #Develop, pero por el momento sigamos con Notepad++)

El código queda como sigue:

using System;

class Program
{
static void Main()
{
Console.WriteLine("Version 0.0.0");
}
}


Y la compilación como:
mcs -main:Program main.cs

Luego la ejecución es como sigue (también tuve que copiar el bat correspondiente):
mono main.exe

El increible resultado es:
Versión 0.0.0 (una variante de Hello World ;-) )

Conclusiones:

  • Una vez armado del ambiente, la primera tarea es compilar MonoDevelop o instalar #Develop (dependiendo del Sistema Operativo), claramente programar en una herramienta como Notepad++ (equivalente al vi que Miguel de Icaza denomina "Editor de Hombres" ;-) ) puede reforzar el concepto de que lo importante es pensar el código, pero hay ciertas comodidades que no quisiera dejar de lado.
  • Incluir los paths correspondientes a Mono en la inicialización, para no replicar los bat (aunque esto puede ser útil mientras aprendo a usar estas herramientas).

Paso 4: NAnt

Uf, esto puede ser para largo, primero no lo he bajado, segundo, he leido artículos de como se utiliza, pero nunca lo he usado directamente.

Bajo Nant 0.85 Release Candidate 3, por el momento sólo el ejecutable. Podria tratar directamente con las fuentes (y compilarlo con mono para usarlo también en Linux), pero creo que por ahora basta con el binario (ya ha tomado harto tiempo todo esto).

Ya son las 22:27, pesa 4 y algo megas, pero con mi enlace eso puede ser lento.

Mientras baja, busco un buen tutorial de NAnt y al final me quedo con el del mismo sitio, mal que mal están todas las referencias.

22:43, terminó de bajar, estamos en condiciones de seguir, mientras he estado revisando documentación diversa y dejé el path operativo.

Interregno: Tuve que salir a ver un remedio para mi señora, pero ya regresé, ya son casi las 0:11.

Crée mi primer archivo .build (es una estructura XML), y por lo menos crea unos directorios. Pero aún no veo bien como configurar que ejecute el compilador de C# de Mono (pareciera que busca csc, el compilador de Microsoft).

Creo que lo voy a dejar hasta aquí por hoy.

Conclusión: Dormir hace bien ;-), luego de dormir (ya es sábado), en 5 minutos dejé armado un script de NAnt que genera un directorio para cada build diario y compila la aplicación (utilizando mcs y no csc). Además, me ha quedado clara la filosofía (me recuerda una idea que en algún momento tuve para automatizar tareas, hace unos dos años).

Lo que aún no he hecho, y tengo que ver si lo hago directamente con tasks del tipo exec o si existe algo para utilizar subversion directamente.... mmmm, acabo de recordar algo, la versión que utilizo de subversion y de tortoise es la que está modificada para que opere con _svn en vez de .svn (por que si no tiene problema con Visual Studio .NET al desarrollar sitios Web).

Eso resuelve las cosas, hay que usar el task exec, pero no lo haré de inmediato, sino que el paso 6, quiero dejar operativo CruiseControl, pues un resultado colateral de todo esto es que quiero automatizar varias tareas actuales y enlazarlas con NAnt y CruiseControl, en particular la ejecución de Queries nocturnas (ese pedido es frecuente y me aburrí de firmar horas extras).


Paso 5: CCNet (CruiseControl.Net) es el siguiente paso.

Utilizando un ejemplo de un blog (que tristemente no funcionó a la primera, probablemente por que no tengo una versión de SVN oficial, sino que el parche).

He logrado configurar CCNet. Aunque hasta ahora no hace nada ;-)

Tuve que modificar nuevamente la configuración de NAnt para que no se detenga si ya existe el directorio (el ejemplo integra cada 60 segundos, claramente eso hay que cambiarlo).

Tengo un problema en el sitio de CCNet (dashboard), que no me da información más detallada. Asi que habrá que ver como mejorar eso y si utilizo o no cctray, pero esos son detalles.

Con todo esto ya estoy en condiciones de poner mi primer tag en SVN para este proyecto, y aunque hay cosas por afinar, ahora comienza lo entretenido, empezar a desarrollar e integrarlo con NUnit.

No hay comentarios.: