Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Artikel ini menyediakan gambaran umum opsi otomatisasi untuk proyek SQL di berbagai platform pengiriman perangkat lunak. Gunakan otomatisasi untuk mengintegrasikan proyek database SQL ke dalam alur CI/CD, dan menyebarkan perubahan database secara konsisten dan berulang kali.
Apa yang harus diotomatisasi
Otomatisasi proyek SQL biasanya melibatkan dua tugas utama dalam alur CI/CD:
Bangun proyek SQL: Validasi proyek dan hasilkan artefak penyebaran (
.dacpac) dengan menjalankandotnet buildproyek database SQL untuk dikompilasi. Secara opsional, jalankan aturan analisis kode untuk memeriksa kualitas kode selama build proyek.Sebarkan
.dacpac: Terbitkan.dacpacke database target menggunakan SqlPackage atau tugas khusus platform. Penyebaran dapat menargetkan Azure SQL Database, Azure SQL Managed Instance, SQL Server, atau database SQL di Fabric.
Saat Anda mengintegrasikan langkah-langkah ini ke dalam alur CI/CD Anda, perubahan database divalidasi pada setiap penerapan dan disebarkan secara konsisten di seluruh lingkungan.
Konsep umum
Aliran artefak: Alur umum memisahkan tahap build dan deploy. Tahap build mengkompilasi proyek SQL dan menghasilkan .dacpac file, yang kemudian diterbitkan sebagai artefak alur. Dalam pekerjaan penyebaran berikutnya (berpotensi setelah persetujuan manual), artefak diunduh dan disebarkan ke database target. Pemisahan ini memungkinkan Anda untuk membangun sekali dan menyebarkan artefak yang sama ke beberapa lingkungan, memastikan konsistensi.
Terbitkan atau skrip: Sebelum menyebarkan ke lingkungan sensitif, Anda dapat meninjau rencana penyebaran. SqlPackage mendukung Script tindakan yang menghasilkan skrip T-SQL yang akan dijalankan selama penyebaran, tanpa menerapkan perubahan. Skrip T-SQL yang disediakan memungkinkan administrator atau peninjau database untuk memeriksa perubahan yang tepat yang diperlukan untuk menerapkan .dacpac persetujuan sebelum. Demikian pula, DeployReport tindakan menghasilkan laporan XML dari perubahan yang direncanakan.
Persetujuan dan gerbang lingkungan: Penyebaran produksi biasanya memerlukan alur kerja persetujuan untuk mencegah perubahan yang tidak diinginkan. GitHub Actions dan Azure DevOps mendukung persetujuan berbasis lingkungan. Di GitHub, Anda dapat mengonfigurasi lingkungan dengan peninjau dan timer tunggu yang diperlukan. Di Azure DevOps, lingkungan mendukung gerbang persetujuan, pembatasan jam kerja, dan kontrol penyebaran lainnya. Kontrol ini membantu memastikan bahwa perubahan database ditinjau dan disetujui sebelum mencapai produksi.
Prasyarat
SqlPackage adalah lintas platform dan berjalan di Windows, Linux, dan macOS. Instal sebagai alat global .NET untuk memastikan perilaku yang konsisten di seluruh lingkungan.
.NET SDK diinstal pada agen build.
SqlPackage diinstal pada agen build. Anda dapat menginstal SqlPackage sebagai alat global .NET:
dotnet tool install --global microsoft.sqlpackage
Platform pengiriman perangkat lunak
Pilih lingkungan yang cocok dengan peralatan, kepatuhan, dan persyaratan konektivitas tim Anda.
Lingkungan virtual terkelola
Lingkungan virtual yang dikelola Microsoft untuk runner yang dihosting GitHub Actions dan agen Azure Pipelines mencakup alat yang telah diinstal sebelumnya:
| Lingkungan | .NET SDK | SqlPackage |
|---|---|---|
| Windows | Preinstalled | Preinstalled |
| Linux | Preinstalled | Tidak diinstal sebelumnya |
| macOS | Preinstalled | Tidak diinstal sebelumnya |
Di lingkungan Linux dan macOS, instal SqlPackage sebagai bagian dari alur kerja Anda. Untuk informasi selengkapnya tentang penginstalan dan penerapan versi SqlPackage dalam alur, lihat SqlPackage dalam alur pengembangan.
Lingkungan yang dihost sendiri
Sebarkan dari runner atau agen yang dihost sendiri saat Anda membutuhkan kontrol lebih besar atas lingkungan, seperti:
- Persyaratan isolasi jaringan (mengakses database yang tidak terekspos ke internet publik)
- Alat kustom atau versi SqlPackage tertentu
- Kebijakan kepatuhan atau keamanan
Anda dapat menyebarkan pelari yang dihost sendiri sebagai pekerjaan Azure Container Apps untuk eksekusi tanpa server berbasis peristiwa. Gunakan pendekatan ini untuk menentukan lingkungan dalam Dockerfile dan menginstal SqlPackage dan alat lain sesuai kebutuhan.
Tindakan GitHub
Tindakan Penyebaran Azure SQL (azure/sql-action) memberikan pengalaman terintegrasi untuk menyebarkan proyek dan .dacpac file SQL ke Azure SQL dan SQL Server dari runner GitHub Actions apa pun.
Kemampuan utama:
- Menyebarkan
.dacpac,.sqlproj, atau.sqlskrip. - Mendukung autentikasi SQL, autentikasi ID Microsoft Entra, dan autentikasi perwakilan layanan.
- Secara otomatis menambahkan dan menghapus aturan firewall sementara untuk Azure SQL Database saat dikombinasikan dengan
azure/login. - Bekerja pada runner Windows dan Linux.
Contoh: Menyebarkan proyek SQL dengan GitHub Actions
# .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'
Untuk penyebaran Azure SQL Database yang memerlukan aturan firewall sementara, tambahkan azure/login langkah sebelum 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'
Anda juga dapat menggunakan SqlPackage langsung pada pelari mana pun. Untuk informasi selengkapnya, lihat SqlPackage dalam alur pengembangan.
Azure Pipelines (Alat otomatisasi alur kerja pengembangan perangkat lunak dari Microsoft)
Azure DevOps menyediakan tugas SqlAzureDacpacDeployment untuk menyebarkan .dacpac file dan skrip SQL ke Azure SQL Database.
Kemampuan utama:
- Menyebarkan
.dacpacfile atau menjalankan skrip SQL. - Mendukung autentikasi SQL, autentikasi ID Microsoft Entra, dan autentikasi perwakilan layanan.
- Secara otomatis mengelola aturan firewall untuk Azure SQL Database.
- Memerlukan agen Windows (gunakan SqlPackage langsung di agen Linux).
Contoh: Menyebarkan .dacpac dengan 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'
Untuk agen Linux atau kontrol lebih atas proses penyebaran, gunakan SqlPackage secara langsung:
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'
Platform CI/CD lainnya
Untuk platform seperti GitLab CI/CD, Jenkins, CircleCI, atau lainnya, gunakan SqlPackage secara langsung untuk membangun dan menyebarkan proyek SQL.
Membangun proyek
dotnet build ./Database.sqlproj -c Release
Menyebarkan .dacpac
sqlpackage /Action:Publish \
/SourceFile:./bin/Release/Database.dacpac \
/TargetConnectionString:"Server=your-server;Database=your-db;User Id=user;Password=password;"