SqlPackage en canalizaciones de desarrollo

SqlPackage es una utilidad de línea de comandos que automatiza varias tareas de desarrollo de la base de datos y que se puede incorporar en canalizaciones de CI/CD.

Entornos virtuales

Nota

Se recomienda el uso de una instalación independiente de SqlPackage para la automatización de canalizaciones frente al uso de los ejecutables de SqlPackage agrupados con otras aplicaciones, incluidos SQL Server Management Studio o Visual Studio. La instalación independiente de SqlPackage se actualiza con más frecuencia y no está vinculada a la cadencia de lanzamiento de otras aplicaciones.

En Windows, la instalación independiente de SqlPackage está disponible en la ruta de acceso C:\Program Files\Microsoft SQL Server\160\DAC\bin (DacFx.msi) o %USERPROFILE%\.dotnet\tools (herramienta dotnet). En Linux, la instalación independiente de SqlPackage está disponible en la ruta de acceso ~/.dotnet/tools (herramienta dotnet). En entornos de Windows y Linux, si descarga el .zip SqlPackage independiente para .NET Core, puede extraer el ejecutable en una ubicación de su elección.

Entornos virtuales administrados

Los entornos virtuales que se usan para los ejecutores hospedados en Acciones de GitHub y las imágenes virtuales de VM de Azure Pipelines se administran en el repositorio runner-images de GitHub. SqlPackage se incluye en varios entornos, incluidos windows-latest y ubuntu-latest. Las actualizaciones de las imágenes en runner-images se realizan a las pocas semanas de cada lanzamiento de SqlPackage.

Entornos virtuales auto-hospedados

Si utiliza SqlPackage en un entorno virtual autohospedado, como un agente de Azure DevOps autohospedado, se recomienda actualizar la aplicación regularmente para mantener el entorno con la versión más reciente.

Seguimiento de implementaciones

Hay algunos archivos relacionados con SqlPackage que se pueden capturar como artefactos de canalización para crear reproducibilidad de la ejecución de la canalización y mejorar el seguimiento de la implementación. Los casos de implementación y uso varían en función de la arquitectura y el entorno de automatización específicos.

  • Archivo .dacpac
  • Salida del archivo de diagnóstico de cualquier acción: utilice el parámetro /DiagnosticsFile: en cualquier acción de SqlPackage, consulte el ejemplo siguiente:
  • Salida de la acción de script antes de la acción de publicación: utilice la acción Script de SqlPackage antes de invocar una acción de publicación.

Otros ejemplos de SqlPackage

Comprobación de la versión de SqlPackage

Durante la solución de problemas, es importante saber cuál es la versión de SqlPackage que está en uso. Para capturar esta información, puede agregar un paso a la canalización para ejecutar SqlPackage con el parámetro /version. A continuación, presentamos ejemplos basados en los entornos administrados de Microsoft y GitHub. Los entornos autohospedados pueden tener rutas de instalación distintas para el directorio de trabajo.

Azure Pipelines

Al usar la palabra clave script en una instancia de Azure Pipelines, se puede agregar un paso a dicha instancia para generar el número de versión de SqlPackage.

- script: SqlPackage /version
  workingDirectory: C:\Program Files\Microsoft SQL Server\160\DAC\bin\
  displayName: 'get sqlpackage version'

Acciones de GitHub

Al usar la palabra clave run en un flujo de trabajo de Acciones de GitHub, se puede agregar un paso a la instancia de Acciones de GitHub para generar el número de versión de SqlPackage.

- name: get sqlpackage version
  working-directory: C:\Program Files\Microsoft SQL Server\160\DAC\bin\
  run: ./SqlPackage /version

Salida de la instancia de Acciones de GitHub que muestra el número de compilación 15.0.4897.1

Obtención de diagnósticos de SqlPackage en un agente de canalización

La información de diagnóstico de SqlPackage está disponible en la línea de comandos a través del parámetro /DiagnosticsFile, que se puede usar en entornos virtuales como Azure Pipelines y Acciones de GitHub. La información de diagnóstico se escribe en un archivo en el directorio de trabajo. El nombre del archivo viene determinado por el parámetro /DiagnosticsFile.

Azure Pipelines

La incorporación del parámetro /DiagnosticsFile al campo "Argumentos adicionales de SqlPackage" en la configuración sqlAzureDacpacDeployment de la canalización de Azure hará que la información de diagnóstico de SqlPackage se escriba en el archivo especificado. Después de la tarea SqlAzureDacpacDeployment, el archivo de diagnóstico puede estar disponible fuera del entorno virtual mediante la publicación de un artefacto de canalización, como se muestra en el ejemplo siguiente.

- task: SqlAzureDacpacDeployment@1
  inputs:
    azureSubscription: '$(azuresubscription)'
    AuthenticationType: 'server'
    ServerName: '$(servername)'
    DatabaseName: '$(databasename)'
    SqlUsername: '$(sqlusername)'
    SqlPassword: '$(sqladminpassword)'
    deployType: 'DacpacTask'
    DeploymentAction: 'Publish'
    DacpacFile: '$(Build.Repository.LocalPath)\$(dacpacname).dacpac'
    AdditionalArguments: '/DiagnosticsFile:$(System.DefaultWorkingDirectory)/output.log'
    IpDetectionMethod: 'AutoDetect'

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(System.DefaultWorkingDirectory)/output.log'
    artifact: 'Diagnostic File'
    publishLocation: 'pipeline'

Después de la ejecución de la canalización, el archivo de diagnóstico se puede descargar desde la página de resumen de ejecución en "Artefactos publicados".

Acciones de GitHub

Agregar el parámetro /DiagnosticsFile al campo "argumentos" en la configuración sql-action de Acciones de GitHub hará que la información de diagnóstico de SqlPackage se escriba en el archivo especificado. Después de la tarea sql-action, el archivo de diagnóstico puede estar disponible fuera del entorno virtual mediante la publicación de un artefacto de canalización, como se muestra en el ejemplo siguiente.

- name: Azure SQL Deploy
  uses: Azure/sql-action@v2
  with:
    # The connection string, including authentication information, for the Azure SQL Server database.
    connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
    # Path to DACPAC file to deploy
    path: .\DatabaseProjectAdventureWorksLT\bin\Release\DatabaseProjectAdventureWorksLT.dacpac
    action: publish
    # additional SqlPackage arguments
    arguments: /DiagnosticsFile:DatabaseProjectAdventureWorksLT/DiagnosticLog.log

- uses: actions/upload-artifact@v2
  with:
    name: 'DiagnosticLog.txt'
    path: 'DatabaseProjectAdventureWorksLT/DiagnosticLog.log'

Actualización de SqlPackage en el agente de canalización

En algunos escenarios, la versión actual de SqlPackage instalada en el entorno de canalización puede ser insuficiente. Si el entorno no se puede modificar directamente, se puede usar un paso adicional para instalar una versión más reciente de SqlPackage durante la ejecución de canalización. Es importante ejecutar el paso de instalación antes de ejecutar cualquier operación DacPac o BacPac en la canalización. Esta tarea se puede combinar con un paso para comprobar la versión a fin de asegurarse de que la actualización se ha completado según lo previsto.

Azure Pipelines

Cuando se usa la tarea de PowerShell en una instancia de Azure Pipelines, se puede agregar un paso a una instancia de Azure Pipelines que descargue el archivo MSI deseado y lo instala en modo silencioso.

- task: PowerShell@2
  displayName: 'upgrade sqlpackage'
  inputs:
    targetType: 'inline'
    script: |
      # use evergreen or specific dacfx msi link below
      wget -O DacFramework.msi "https://aka.ms/dacfx-msi"
      msiexec.exe /i "DacFramework.msi" /qn

Pasos siguientes