Compartir vía


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

En un entorno virtual autohospedado, como un agente de Azure DevOps autohospedado, actualice la aplicación regularmente para mantener el entorno con la versión más reciente.

Seguimiento de implementaciones

Puede capturar algunos archivos relacionados con SqlPackage para reproducir canalizaciones y mejorar el seguimiento de la implementación. Los casos de implementación y uso dependen de la arquitectura y el entorno de automatización específicos.

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

En una canalización de Azure, la palabra clave script devuelve 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

En un flujo de trabajo de acción de GitHub, la palabra clave run devuelve 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