El Bruno

Blog dedicado a las experiencias del desarrollo con tecnologías Microsoft.
[VSTE4DB] Como realizar el deploy de nuestros proyectos de bases de datos ??

Buenas

después del Service Release 1 para Visual Studio Team Edition for Database Professionals, muchas cosas se han arreglado. Entre ellas algunos aspectos relacionados con el deploy de nuestros proyectos de bases de datos cuando trabajamos con Team Foundation Server y con el servidor Team Build. Éste es un tema sobre el que me preguntan bastante asi que repasaré algunas de las opciones que tenemos para lograr que nuestro deploy sea satisfactorio. El siguiente listado recoge algunos de los puntos que tenemos que tener en cuenta para trabajar con Visual Studio Team Edition for Database Professionals

 

1. Nuevo Schema para los proyectos de Base de Datos

Una vez instalado el Service Release 1 para Visual Studio Team Edition for Database Professionals cuando abrás nuevamente un proyecto de bases de datos, el mismo se actualizará a la nueva versión modificando las propiedades del mismo. Esto significa que todas las personas que trabajen con este proyecto deben actualizar a SR1.

 

2. Nuevas propiedades para los proyectos de Base de Datos

Los nuevos proyectos poseerán nuevas propiedades con las que podremos trabajar, por ejemplo en la pestaña Build, podremos ver algunos campos nuevos para la base de datos de detinos donde queremos hacer el deploy de nuestro proyecto.

Sin embargo, estos datos que vemos aquí no quedan reflejados en el archivo de proyecto. Debemos asegurarnos que los campos Target connection, Target database name y Default location for target database files posean información para poder procesar nuestro proyecto. Lamentablemente Visual Studio Team Edition for Database Professionals no guarda estos valores correctamente en el archivo de proyecto por lo que debemos revisar los valores del mismo.

Para esto debemos editar el archivo de nuestro proyecto (MyProyect.dbproj) y dentro del mismo verificar los valores de los elementos <TargetConnectionString>, <TargetDatabase> y <DefaultDataPath>. El siguiente ejemplo muestra la configuración para el modo test de un proyecto de prueba donde podemos ver los 2 primeros elementos con los valores modificados.

<PropertyGroup Condition=" '$(Configuration)' == 'Test' "> <AutoGenerateBuildScriptName>False</AutoGenerateBuildScriptName> <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName> <TargetConnectionString>SERVER=ElServerDelBruno; Database=dbTestDeploy; User Id=ElAdministratorDelBruno; Password=LaPasswordDelAdministratorDelBruno</TargetConnectionString> <TargetDatabase>dbTestDeploy</TargetDatabase> <DeploymentCollationPreference>None</DeploymentCollationPreference> <AlwaysCreateNewDatabase>true</AlwaysCreateNewDatabase> <GenerateDropsIfNotInProject>False</GenerateDropsIfNotInProject> <BlockIncrementalDeploymentIfDataLoss>True</BlockIncrementalDeploymentIfDataLoss> <TreatWarningsAsErrors>False</TreatWarningsAsErrors> <PerformDatabaseBackup>False</PerformDatabaseBackup> <SingleUserMode>False</SingleUserMode> <UseFuzzyMatchForColumns>False</UseFuzzyMatchForColumns> <SuppressWarnings></SuppressWarnings> <OutputPath>.\Test\</OutputPath> </PropertyGroup>

 

Para probar este ejemplo, y como tengo seleccionada la opción <AlwaysCreateNewDatabase>, simplemente borro la base de datos y compilo el proyecto. La nueva base de datos dbTestDeploy se debe crear exitosamente en el servidor seleccionado.

 

3. Integrando la compilación en TFS

Este es un punto muy delicado y donde pienso que Visual Studio Team Edition for Database Professionals tiene que madurar mucho todavía. Si nuestro proyecto de base de datos forma parte de una solución y hemos decido que la misma se compile en nuestro servidor de compilación, debemos tener en cuenta lo siguiente:

  1. Además de Visual Studio 2005, Visual Studio Team Edition for Database Professionals y Service Release 1 deben estar instalados en el servidor de Build.
  2. Es necesaria una instancia de Microsoft SQL Server 2005 o Microsoft SQL Server 2005 Express, en nuestro servidor de compilación para que Visual Studio Team Edition for Database Professionals pueda trabajar correctamente y crear los proyectos en tiempo de diseño.
  3. El siguiente error nos dice que el usuario con el que está ejecutándose el servicio no tiene configurada correctamente las opciones para Visual Studio Team Edition for Database Professionals
    MSBUILD : Build error TSD158: An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)


  4. Para configurar estas opciones, es necesario abrir una sesión con el usuario que ejecuta el servicio, iniciar Visual Studio 2005 y verificar en las opciones la configuración para Visual Studio Team Edition for Database Professionals. Para esto desde el menu Tools // Options, debemos revisar la siguiente configuración, y es necesario recomendable crear un proyecto de base de datos desde este perfil para asegurarnos que funciona correctamente.



  5. Si después de configurar el usuario del servicio, el mismo sigue dando un error, es posible realizar esta configuración "a mano" agregando una tarea específica en nuestro proyecto de MSBuild:
    <Target Name="ConfigDBPro"> <Exec Command="REG ADD HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\DBPro\DialogPage\Microsoft.VisualStudio.TeamSystem.Data.DBProject.Settings.DataConnectionOptionsSettings /v DefaultSqlServerName /d scratch2k5"/> <Message Text="Configured registry entry for $(USERNAME)" /> </Target> </Project>


  6. Si esto tampoco funciona, es recomendable revisar si el usuario de dominio que ejecuta el servicio tiene los permisos recomendables dentro de la instancia de Microsoft SQL Server 2005 donde se ejecuta el servidor de compilación. Si no están definidos estos permisos, es recomendable asignar este usuario al grupo de SQL Server.

     

 

4. Realizando el despliegue desde TFS

Esta es la parte mas simple (¿?¿?), si hemos configurado nuestro proyecto para que haga un deploy automático de la base de datos; y queremos que este proceso se realice automáticamente desde nuestro servidor de compilación, estas son algunas opción para lograrlo.

 

  1. Agregar un nuevo target a nuestro proyecto de compilación en el evento AfterDropBuild, con una tarea del tipo MsBuild, donde indicamos la ruta de nuestro proyecto de base de datos y especificamos la configuración y el tipo de acción [Deploy].
    <Target Name="AfterDropBuild"> <MSBuild Projects="$(SolutionRoot)\SolutionName\ProjectName\dbTestDeploy.dbproj" Properties="Configuration=Test;OutDir=$(SolutionRoot)\..\binaries\Default\" Targets="Deploy" /> <Message Text="Deploy completed from $(USERNAME)" /> </Target>


  2. Como última opción, podemos invocar a la herramienta SQLCMD para que ejecute el script que ha generado la compilación de nuestro proyecto. Para esto agregamos un nuevo target a nuestro proyecto de compilación en el evento AfterDropBuild con la siguiente información
    <Target Name="AfterDropBuild"> <Exec Command="sqlcmd.exe -S ElServerDelBruno -i $(DropLocation)\$(BuildNumber)\Test\dbTestDeploy.sql -o $(DropLocation)\$(BuildNumber)\Test\dbTestDeploy.log"/> </Target>


    Esta opción no es la mas agradable, pero cumple con la tarea requerida y realiza el despliegue de la base de datos.

5. Conclusión

Desde las primeras CTPs Visual Studio Team Edition for Database Professionals ha madurado mucho y creo que se ha consolidado como un perfil indispensable dentro del ciclo de vida de desarrollo. Lamentablemente, todavía hoy no es lo suficientemente configurable como otros productos, como para poder integrarlo tan fácilmente en un proyecto donde se aplique Integración Continua o alguna aproximación a las compilaciones automáticas. Es necesario un poco de paciencia, MSBuild y notepad para lograrlo.

Con la llegada de Microsoft Visual Studio 2008 veremos un perfil para DB más potente y seguramente este tipo de detalles serán solucionados. Mientras tanto cada vez que veo la siguiente imagen me lleno de alegría:

 

 

Referencias

Recomendable leer un poco en:

 

 

Saludos @ Lisboa

El Bruno

Published jueves, 30 de agosto de 2007 14:55 by elbruno

Comments

# [VSTE4DB] Incluyendo scripts para inicializar tablas con datos@ miércoles, 19 de septiembre de 2007 23:28

Buenas si trabajar con proyectos de bases de datos con Visual Studio Team Edition for Database Professionals

El Bruno

# [VSTE4DB] Incluyendo scripts para inicializar tablas con datos@ miércoles, 19 de septiembre de 2007 23:28

Buenas si trabajar con proyectos de bases de datos con Visual Studio Team Edition for Database Professionals

El Bruno

# [VSTE4DB] Incluyendo scripts para inicializar tablas con datos@ miércoles, 19 de septiembre de 2007 23:29

Buenas si trabajar con proyectos de bases de datos con Visual Studio Team Edition for Database Professionals

El Bruno