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.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
En este artículo se proporciona información general sobre las opciones de automatización para proyectos de SQL en distintas plataformas de entrega de software. Use la automatización para integrar proyectos de base de datos SQL en canalizaciones de CI/CD e implementar cambios de base de datos de forma coherente y repetida.
Qué automatizar
Normalmente, la automatización de proyectos de SQL implica dos tareas clave en una canalización de CI/CD:
Compile el proyecto SQL: valide el proyecto y genere el artefacto de implementación (
.dacpac) ejecutandodotnet builden el proyecto de base de datos SQL que se va a compilar. Opcionalmente, ejecute reglas de análisis de código para comprobar la calidad del código durante la compilación del proyecto.Implemente :
.dacpacpublique en.dacpacuna base de datos de destino mediante SqlPackage o una tarea específica de la plataforma. La implementación puede tener como destino Azure SQL Database, Azure SQL Managed Instance, SQL Server o SQL Database en Fabric.
Al integrar estos pasos en la canalización de CI/CD, los cambios de base de datos se validan en cada confirmación e implementan de forma coherente en todos los entornos.
Conceptos comunes
Flujo de artefacto: una canalización típica separa las fases de compilación e implementación. La fase de compilación compila el proyecto SQL y genera un .dacpac archivo, que luego se publica como un artefacto de canalización. En un trabajo de implementación posterior (potencialmente después de la aprobación manual), el artefacto se descarga e implementa en la base de datos de destino. Esta separación permite compilar una vez e implementar el mismo artefacto en varios entornos, lo que garantiza la coherencia.
Publicación o script: antes de implementar en entornos confidenciales, puede revisar el plan de implementación. SqlPackage admite una Script acción que genera el script T-SQL que se ejecutaría durante la implementación, sin aplicar cambios. El script T-SQL proporcionado permite a los administradores o revisores de bases de datos examinar los cambios exactos necesarios para aplicar antes de la .dacpac aprobación. De forma similar, la DeployReport acción genera un informe XML de los cambios planeados.
Aprobaciones y puertas del entorno: las implementaciones de producción suelen requerir flujos de trabajo de aprobación para evitar cambios no deseados. Tanto Acciones de GitHub como Azure DevOps admiten aprobaciones basadas en entornos. En GitHub, puede configurar entornos con revisores necesarios y temporizadores de espera. En Azure DevOps, los entornos admiten puertas de aprobación, restricciones de horario comercial y otros controles de implementación. Estos controles ayudan a garantizar que los cambios de base de datos se revisen y aprueben antes de llegar a producción.
Prerrequisitos
SqlPackage es multiplataforma y se ejecuta en Windows, Linux y macOS. Instálelo como una herramienta global de .NET para garantizar un comportamiento coherente en todos los entornos.
SDK de .NET instalado en el agente de compilación.
SqlPackage instalado en el agente de compilación. Puede instalar SqlPackage como una herramienta global de .NET:
dotnet tool install --global microsoft.sqlpackage
Plataformas de entrega de software
Elija un entorno que coincida con los requisitos de herramientas, cumplimiento y conectividad de su equipo.
Entornos virtuales administrados
Los entornos virtuales administrados por Microsoft para los ejecutores hospedados de Acciones de GitHub y los agentes de Azure Pipelines incluyen herramientas preinstaladas:
| Medio ambiente | SDK de .NET | SqlPackage |
|---|---|---|
| Windows | Preinstalled | Preinstalled |
| Linux | Preinstalled | No preinstalado |
| macOS | Preinstalled | No preinstalado |
En entornos de Linux y macOS, instale SqlPackage como parte del flujo de trabajo. Para obtener más información sobre la instalación y el control de versiones de SqlPackage en canalizaciones, consulte SqlPackage en canalizaciones de desarrollo.
Entornos autohospedados
Implemente desde un ejecutor o agente autohospedado cuando necesite más control sobre el entorno, como:
- Requisitos de aislamiento de red (acceso a bases de datos no expuestas a la red pública de Internet)
- Herramientas personalizadas o versiones específicas de SqlPackage
- Directivas de cumplimiento o seguridad
Puede implementar ejecutores autohospedados como trabajos de Azure Container Apps para la ejecución sin servidor controlada por eventos. Use este enfoque para definir el entorno en un Dockerfile e instalar SqlPackage y otras herramientas según sea necesario.
GitHub Actions
La acción Implementar de Azure SQL (azure/sql-action) proporciona una experiencia integrada para implementar proyectos y .dacpac archivos de SQL en Azure SQL y SQL Server desde cualquier ejecutor de Acciones de GitHub.
Funciones clave:
-
.dacpacImplementa scripts ,.sqlprojo.sql. - Admite la autenticación de SQL, la autenticación de Id. de Microsoft Entra y la autenticación de entidad de servicio.
- Agrega y quita automáticamente reglas de firewall temporales para Azure SQL Database cuando se combina con
azure/login. - Funciona tanto en ejecutores de Windows como en Linux.
Ejemplo: Implementación de un proyecto de SQL con Acciones de GitHub
# .github/workflows/sql-deploy.yml
on: [push]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/sql-action@v2
with:
connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
path: './Database.sqlproj'
action: 'publish'
En el caso de las implementaciones de Azure SQL Database que requieren una regla de firewall temporal, agregue el azure/login paso antes de sql-action:
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- uses: azure/sql-action@v2
with:
connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
path: './Database.dacpac'
action: 'publish'
También puede usar SqlPackage directamente en cualquier ejecutor. Para obtener más información, consulte SqlPackage en canalizaciones de desarrollo.
Azure Pipelines (Canales de Azure)
Azure DevOps proporciona la tarea SqlAzureDacpacDeployment para implementar .dacpac archivos y scripts SQL en Azure SQL Database.
Funciones clave:
-
.dacpacImplementa archivos o ejecuta scripts SQL. - Admite la autenticación de SQL, la autenticación de Id. de Microsoft Entra y la autenticación de entidad de servicio.
- Administra automáticamente las reglas de firewall para Azure SQL Database.
- Requiere un agente de Windows (use SqlPackage directamente en agentes de Linux).
Ejemplo: Implementación de con .dacpac Azure DevOps
# azure-pipelines.yml
trigger:
- main
pool:
vmImage: 'windows-latest'
steps:
- task: SqlAzureDacpacDeployment@1
inputs:
azureSubscription: 'your-service-connection'
AuthenticationType: 'server'
ServerName: 'your-server.database.windows.net'
DatabaseName: 'your-database'
SqlUsername: '$(SqlUser)'
SqlPassword: '$(SqlPassword)'
deployType: 'DacpacTask'
DeploymentAction: 'Publish'
DacpacFile: '$(Build.ArtifactStagingDirectory)/Database.dacpac'
Para los agentes de Linux o más control sobre el proceso de implementación, use SqlPackage directamente:
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '8.x'
- script: dotnet tool install --global microsoft.sqlpackage
displayName: 'Install SqlPackage'
- script: |
sqlpackage /Action:Publish \
/SourceFile:$(Build.ArtifactStagingDirectory)/Database.dacpac \
/TargetConnectionString:"$(ConnectionString)"
displayName: 'Deploy database'
Otras plataformas de CI/CD
Para plataformas como CI/CD de GitLab, Jenkins, CircleCI u otros, use SqlPackage directamente para compilar e implementar proyectos sql.
Construir el proyecto
dotnet build ./Database.sqlproj -c Release
Implementación del .dacpac
sqlpackage /Action:Publish \
/SourceFile:./bin/Release/Database.dacpac \
/TargetConnectionString:"Server=your-server;Database=your-db;User Id=user;Password=password;"