DEV Community

Cover image for Como publicar un proyecto de Base de datos de Visual Studio a Azure SQL con Azure Pipelines
Victor Canseco Soto
Victor Canseco Soto

Posted on

Como publicar un proyecto de Base de datos de Visual Studio a Azure SQL con Azure Pipelines

Hola nuevamente, el día de hoy les tengo un proyecto bastante interesante ya que a todos nos ha pasado que se vuelve un caos controlar los cambios que tenemos en nuestras bases de datos, por ejemplo con cada iteración de nuestro proyecto tenemos pequeños cambios a la base de datos, los cuales muy comúnmente los controlamos mediante scripts de SQL, la mayoría de las veces los colocamos dentro del mismo repositorio de nuestra aplicación y en cada deploy a productivo tenemos que ejecutar estos scripts dentro de la base de datos manualmente. Sin embargo, a todos los que hemos realizado esta mala practica nos ha pasado que se nos olvida ejecutar alguno de ellos o no se ejecutan en el orden correcto y cuando todo se integra algo se rompe.
Bueno para solucionar este problema dentro de Visual Studio podemos crear un proyecto de Base de datos, el cual podemos colocar dentro de un Repo para controlar las versiones y cambios a nuestra Base de datos y todos estos cambios los podemos realizar controlada y automáticamente hacia nuestra base de datos a través de Azure Pipelines. A continuación, te mostraré como realizar esto paso a paso.
Primero que nada, comenzamos creando nuestro proyecto de base de datos dentro de Visual Studio.
Image description

Seleccionamos el proyecto de SQL Server
Image description

Le ponemos un nombre y creamos el proyecto
Image description

Una vez creado el proyecto, la solucion se encuentra en blanco; para ligar nuestra base de datos tenemos varias opciones, una de ellas nos permite importar toda nuestra base (tablas, store procedures, triggers, logins y demás objetos de la db) lo cual es de gran ayuda si es que ya tenemos una base de datos creada. Para esto damos click derecho en el proyecto -> Import -> Database.
Image description

Seleccionamos nuestra base de datos
Image description

Le damos **Start **para iniciar la importación
Image description

Image description

Una vez terminada la importación podemos ver dentro del explorador de soluciones todos los objetos de nuestra DB.
En mi caso la base esta vacía, por lo cual creare 2 tablas (User y Product); esto con la finalidad de demostrar como se realizan los cambios a nuestra base de datos.
Image description

Antes de crear los pipelines debemos configurar nuestro proyecto para que se pueda realizar el despliegue hacia Azure SQL, para ello primero configuramos el servidor objetivo como Azure SQL; por alguna extraña razón, aunque importemos de Azure la base de datos Visual Studio mantiene la configuración como SQL Server 2016 lo cual al momento de hacer el despliegue a nuestra base en Azure nos marcará error ya que son incompatibles. Para corregir esto damos click derecho en nuestro proyecto y seleccionamos Propiedades.
Image description

Ahí cambiamos el Target Platform a Azure SQL
Image description

Una vez configurado nuestro Target Platform procedemos a crear el perfil de publicación, este perfil es necesario para realizar el deploy a nuestra base de datos. Para crearlo damos click derecho sobre el proyecto y seleccionamos Publish…
Image description

Presionamos el botón Create Profile, una vez que el botón se inhiba damos click en cerrar(cancelar).
Image description

Como podemos observar en nuestro proyecto se crea un archivo dentro de la raíz de este, en mi caso se generó el archivo DBproject.publish.xml
Image description

Procedemos a guardar nuestro proyecto dentro de un Repo de Azure, en esta parte podemos observar que el perfil de publicación no lo agrega al control de código, para corregir esto le damos click derecho y seleccionamos: Git -> Add Ignored File to Source Control…
Image description
Image description

Después de esto damos nuevamente click derecho sobre el perfil y seleccionamos Propiedades; este cambio lo debemos realizar ya que por default el archivo no queda con la opción de copiar al directorio destino.
Image description

Seleccionamos Copy Always en la propiedad de Copy to Output Directory.
Image description

Como siguiente paso creamos un nuevo pipeline dentro de Azure, para esto seleccionamos un nuevo pipeline de Azure.
Image description
Image description
Image description

A continuación, pongo el archivo YAML para que puedas modificar el código de acuerdo a la configuración de tu proyecto.

trigger:
- master

jobs:
- job: Job_1
  displayName: Build DB project.
  pool:
    vmImage: windows-2019

  steps:
  - checkout: self
    clean: true
  - task: VSBuild@1
    displayName: Build solution DBproject
    inputs:
      solution: DBproject/DBproject.sqlproj
      msbuildArgs: /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=”$(Build.ArtifactStagingDirectory)\\”
      platform: any cpu
      configuration: release
  - task: CopyFiles@2
    displayName: Copy Dacpac to Build
    inputs:
      SourceFolder: DBproject/bin/Output
      Contents: DBproject.dacpac
      TargetFolder: $(Build.ArtifactStagingDirectory)
  - task: CopyFiles@2
    displayName: Copy Publish profile
    inputs:
      SourceFolder: DBproject
      Contents: DBproject.publish.xml
      TargetFolder: $(Build.ArtifactStagingDirectory)
  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifact'
    inputs:
      ArtifactName: DBproject
Enter fullscreen mode Exit fullscreen mode

Guardamos y ejecutamos nuestro pipeline el cual debe ejecutarse correctamente; continuamos con la creación de nuestro Release para esto damos click al botón crear New release pipeline
Image description

Seleccionamos un pipeline vacío. Y en la sección de Artifacts **seleccionamos como **Source Type: Build.
Seleccionamos nuestro proyecto y el Source de nuestro proyecto y Default Version: _Latest _

Image description

En la sección de Stages, damos click en Jobs **y agregamos una nueva Tarea al Agent, esta será de tipo **Azure SQL Database deployment
Image description

Esta tarea la configuramos con los datos de nuestra base de datos e información de nuestro proyecto, deberá de quedar de la siguiente forma:
Image description
Image description

Ejecutamos nuestro pipeline y esperamos a que termine el deploy, una vez terminado podemos revisar nuestros cambios en la base de datos; en mi caso deben aparecer las dos tablas que agregue.
Image description

Para poder revisar que efectivamente se respeten los cambios a la base de datos sin afectar a lo existente; agregare registros a una de las tablas que cree.

Image description

Creamos una nueva tabla para este ejemplo creare la tabla Store.
Image description

Ejecutamos nuestros Pipelines y esperamos a que termine el deploy a nuestra base de datos. Revisamos que nuestros cambios estén aplicados y también podemos revisar que no se haya afectado la información que ya teníamos almacenada en nuestra base de datos.
Image description
Image description

Como podemos observar nuestra información esta intacta y solo se aplicaron los cambios, como en este caso crear una tabla nueva.

Espero que este tutorial de como crear un proyecto de base de datos y hacer el deploy hacia una base de datos en Azure te sea de ayuda. Con esto tenemos controlado y automatizado los cambios que realice el equipo de desarrollo a la base de datos.

Mi website

Top comments (0)