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.
- Archivo .dacpac
- Salida de archivo de diagnóstico desde cualquier acción: use el parámetro
/DiagnosticsFile:
en cualquier acción de SqlPackage; consulte Obtención de diagnósticos de SqlPackage en un agente de canalización - 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
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
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
- Mas información sobre SqlPackage.