Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Nota
Se recomienda utilizar una instalación independiente de SqlPackage para la automatización de canalizaciones en lugar de usar los ejecutables de SqlPackage agrupados con otras aplicaciones, incluido 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 versión de otras aplicaciones.
Si SqlPackage está instalado como una herramienta dotnet global (recomendada), puede invocarlo en el pipeline simplemente con sqlpackage desde cualquier directorio. Si SqlPackage se instala como un ejecutable independiente, debe especificar la ruta de acceso completa al ejecutable en la canalización. En Windows, la instalación independiente de SqlPackage está disponible en la ruta C:\Program Files\Microsoft SQL Server\170\DAC\bin (DacFx.msi). En entornos de Windows y Linux, si descarga el SqlPackage autocontenido en formato .zip para .NET, puede extraer el archivo ejecutable a 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 de máquina virtual de Azure Pipelines se administran en el repositorio de GitHub runner-images . SqlPackage se incluye en varios entornos, incluidos windows-latest y ubuntu-22.04 , pero ya no se incluye de forma predeterminada en ubuntu-24.04 y ubuntu-latest. Las actualizaciones de las imágenes en runner-images se realizan a las pocas semanas de cada lanzamiento de SqlPackage.
En un entorno virtual administrado, instalaría SqlPackage durante la ejecución dentro de la canalización. La instalación se realiza como un paso separado tanto en Azure Pipelines como en GitHub Actions y agrega un breve retraso a cada ejecución de la canalización durante la instalación. Para instalar SqlPackage en tiempo de ejecución, agregue un paso a la canalización que usa la CLI de dotnet para instalar SqlPackage como una herramienta global. Este paso debe ejecutarse antes de cualquier acción de SqlPackage en la canalización.
dotnet tool install --global Microsoft.SqlPackage
Es posible que tenga que realizar un paso de instalación de .NET en la canalización antes de instalar SqlPackage, indicado por un mensaje de error que indica que no se encuentra .NET. Use una acción integrada para configurarla, como la tarea UseDotNet en Azure Pipelines o la acción setup-dotnet en Acciones de GitHub.
Opcionalmente, puede especificar una versión de SqlPackage que se va a instalar anexando --version <version> al comando de instalación o puede usar la --prerelease marca para instalar una versión preliminar.
Ejemplo: Pasos para instalar SqlPackage en canalizaciones de Azure DevOps
En Azure DevOps Pipelines, puede usar la tarea UseDotNet para instalar el SDK de .NET y, a continuación, instalar SqlPackage como una herramienta global. Si usa un agente de Windows proporcionado por Microsoft, SqlPackage ya está instalado en C:\Program Files\Microsoft SQL Server\170\DAC\bin. Si usa un agente autohospedado, también puede instalar SqlPackage en el entorno hospedado y omitir este paso en la canalización.
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '8.x'
- script: dotnet tool install --global Microsoft.SqlPackage --version <version>
displayName: 'Install specific version of SqlPackage'
Ejemplo: Pasos para instalar SqlPackage en Acciones de GitHub
En Acciones de GitHub, puede usar la acción setup-dotnet para instalar el SDK de .NET y, a continuación, instalar SqlPackage como una herramienta global. Si usa un ejecutor de Windows proporcionado por GitHub, SqlPackage ya está instalado en C:\Program Files\Microsoft SQL Server\170\DAC\bin. Si usa un ejecutor autohospedado, también puede instalar SqlPackage en el entorno de host y omitir este paso en el flujo de trabajo.
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.x'
- name: Install SqlPackage
run: dotnet tool install --global Microsoft.SqlPackage --version <version>
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. En este artículo se proporcionan ejemplos basados en los entornos administrados de Azure DevOps y GitHub, los entornos autohospedados pueden tener diferentes rutas de instalación 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\170\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\170\DAC\bin\'
run: ./SqlPackage /version
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 podría 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 la 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, agente basado en Windows
Cuando se usa la tarea de PowerShell en una canalización de Azure, se puede agregar un paso a una canalización de Azure que descargue el instalador de DacFx deseado e instálelo de forma silenciosa.
- 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
Acciones de GitHub, ejecutor basado en Linux
En un flujo de trabajo de acción de GitHub, puede usar la palabra clave run para ejecutar los dotnet tool comandos para instalar, desinstalar o actualizar SqlPackage. En el ejemplo siguiente se muestra cómo actualizar SqlPackage a la versión preliminar más reciente:
- name: Update SqlPackage
run: dotnet tool update --global Microsoft.SqlPackage --prerelease
Entornos virtuales auto-hospedados
En un entorno virtual autohospedado, como un agente de Azure DevOps autohospedado o un ejecutor de Acciones de GitHub, puede instalar SqlPackage en el entorno de host o instalar SqlPackage en tiempo de ejecución, tal como se describe en entornos virtuales administrados. Si instala SqlPackage en el entorno de host, las canalizaciones que se ejecutan en ese host no necesitan instalar SqlPackage en tiempo de ejecución, lo que puede acelerar las ejecuciones de canalización. Cuando SqlPackage está instalado en el host, debe actualizar SqlPackage periódicamente para mantener el entorno con la versión más reciente.
Los trabajos de Azure Container Apps se pueden usar para implementar ejecutores autohospedados en un contenedor que se implementa según sea necesario para cada invocación de flujo de trabajo. Con los trabajos de Container Apps, puede controlar el entorno tal como se define en Dockerfile e instalar SqlPackage y otras herramientas según sea necesario. El ejecutor autohospedado se puede configurar para que se ejecute en una versión específica de SqlPackage mediante la inclusión del paso de instalación en la imagen de contenedor. Por ejemplo, el tutorial incluye un Dockerfile que instala curl y jq.
Este ejemplo se puede modificar para generar una imagen de contenedor que instale .NET 8.0 y SqlPackage:
FROM ghcr.io/actions/actions-runner:2.323.0
USER root
# install dotnet sdk and sqlpackage
RUN apt-get update && apt-get install -y dotnet-sdk-8.0 && \
dotnet tool install --tool-path /usr/local/bin/ Microsoft.SqlPackage
COPY entrypoint.sh ./entrypoint.sh
RUN chmod +x ./entrypoint.sh
USER runner
ENTRYPOINT ["./entrypoint.sh"]
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 su arquitectura y entorno de automatización específicos.
Archivo Dacpac
Salida del archivo de diagnóstico de cualquier acción: Utilice el
/DiagnosticsFile:parámetro en cualquier acción SqlPackage. Para obtener más información, consulte Obtener 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
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
Al agregar el /DiagnosticsFile parámetro al campo "Argumentos adicionales de SqlPackage" en la configuración de SqlAzureDacpacDeployment de Azure Pipeline, la información de diagnóstico de SqlPackage se escribirá en el archivo especificado. Después de la tarea SqlAzureDacpacDeployment, el archivo de diagnóstico está 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 ejecutar 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 de acciones de GitHub para sql-action hace 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 se puede poner a disposición fuera del entorno virtual mediante la publicación de un artefacto 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'