Otomatisasi proyek SQL

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure 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 menjalankan dotnet build proyek database SQL untuk dikompilasi. Secara opsional, jalankan aturan analisis kode untuk memeriksa kualitas kode selama build proyek.

  • Sebarkan .dacpac: Terbitkan .dacpac ke 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.

Diagram memperlihatkan alur dari build proyek SQL ke artefak dan penyebaran dacpac ke database.

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 .sql skrip.
  • 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 .dacpac file 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;"