Entorno
Para poner en práctica esta idea, vamos a utilizar:- Visual Studio 2008 Team System Database Edition GDR R2
- Microsoft SQL Server Express 2005
Los eventos Pre-Build y Post-Build
Visual Studio nos ofrece una manera fácil y rápida de ejecutar un comando previo a la construcción de un proyecto y otro después de la construcción. Para ver/modificar los comandos debemos acceder a la pestaña "Eventos de Construcción" (Build Events) en la ventana de Atributos del Proyecto (Project Properties):[Insertar Imagen]
En los campos para la línea de comando de los eventos podemos escribir comandos que se ejecutarán en la línea de comandos de Windows, con la característica de que tenemos acceso a ciertas macros que nos permiten incrustar los valores de algunos atributos del proyecto en el texto del comando que se ejecuta:
sqlcmd
Antes de la interfaz gráfica existía el nirvana de la línea de comandos. Una simple interfaz que nos permite automatizar diversas tareas. Digamos que es el lenguaje natural de programación que nos ofrece el sistema operativo.Cuando instalamos SQL Server Express, tenemos la opción de instalar las herramientas de administración y línea de comandos. Para el mortal promedio, estos programas adicionales no son de mucha utilidad, sin embargo para el verdadero programador son como una caja llena de bloques Lego(tm). Uno de esos bloques es: sqlcmd.exe, un programa que nos permite:
- Conectarnos a un servidor SQL Server —valga la redundancia— y enviarle comandos de manera interactiva o,
- lo que nos interesa, especificando un archivo de entrada a través del modificador
-i
- Además, podemos utilizar variables en el código del archivo y especificar su valor al momento de ejecución a través del modificador
-v
Ejecución condicional en la línea de comandos
A pesar de que el intérprete de comandos de Windows está muy limitado en comparación con Bash, nos permite condicionar la ejecución de un comando utilizando la directivaif
que tiene variantes para evaluar expresiones booleanas que comparen cadenas de caracteres, determinar la existencia de un archivo, entre otras.Si creen que necesitan un intérprete más rico en expresiones y comandos, pueden utilizar Windows Scripting Host para ejecutar rutinas escritas en VBScript o JScript. Otra alternativa más reciente y que exploraré próximamente es PowerShell
El comando para generar la rutina de restauración
Recordando los viejos tiempos de DOS e inspirado por las rutinas de Bash tan socorridas en Linux, escribí el siguiente comando para ejecutar mi rutina de T-SQL para generar el código para restaurar la base de datos en mi ambiente de desarrollo (ajusté el formato para mayor claridad, pero en realidad va en una sola línea):
if "$(Configuration)" == "Debug" (
if "$(DeployToDatabase)" == "True" (
sqlcmd -U sa -P contraseñaSA -S nombre.host.servidor,puerto
-v ProductionDatabaseName="BaseDeDatosProduccion"
-v DatabaseName="$(FinalTargetDatabase)"
-v RestorePath="X:\Ruta\Restauracion"
-i "$(SolutionDir)Ruta\A\Rutina\GenerarRutinaRestauracion.sql"
-o "$(SolutionDir)NombreProyecto\$(OutputPath)Restaurar.sql"
)
)
- Si la configuración del proyecto es igual a "Debug", entonces:
- Si está marcada la opción "Deploy to Database", entonces:
- Utilizar sqlcmd para ejecutar la rutina que genera la rutina de restauración, utilizando los parámetros indicados
- Si está marcada la opción "Deploy to Database", entonces:
El comando para ejecutar la rutina de restauración
El comando para ejecutar la rutina que se generó en el event Pre-build es el siguiente:
if "$(Configuration)" == "Debug" (
if "$(DeployToDatabase)" == "True" (
if exist $(SolutionDir)NombreProyecto\$(OutputPath)Restaurar.sql (
sqlcmd -U sa -P contraseñaSA -S nombre.host.servidor,puerto
-v DatabaseName="$(FinalTargetDatabase)"
-i $(SolutionDir)NombreProyecto\$(OutputPath)Restaurar.sql
)
)
)
Conclusión
Visual Studio nos permite integrar acciones de manera fácil y rápida al proceso de construcción de una solución. Con un poco de ingenio podemos mejorar nuestra eficiencia al dejar que las tareas tediosas y repetitivas de nuestro proceso de desarrollo sean ejecutadas por la misma herramienta de construcción.En algún momento en el futuro, exploraré más a detalle el proceso de construcción de Visual Studio. Tengo curiosidad por conocer el proceso de construcción más a fondo y poder extenderlo más allá de los simples eventos. Por lo pronto esta solución simple funciona y me ha permitido tener más tiempo disponible (mientras espero a que se complete el proceso de construcción de Visual Studio) para poder publicar esta entrada.
No hay comentarios:
Publicar un comentario