SQL projeleri otomasyonu

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

Bu makalede, farklı yazılım teslim platformlarında SQL projeleri için otomasyon seçeneklerine genel bir bakış sağlanır. SQL veritabanı projelerini CI/CD işlem hatlarıyla tümleştirmek ve veritabanı değişikliklerini tutarlı ve sürekli olarak dağıtmak için otomasyonu kullanın.

Otomatikleştirmek için gerekenler

SQL projeleri otomasyonu genellikle CI/CD işlem hattında iki temel görev içerir:

  • SQL projesini oluşturma: Projeyi doğrulayın ve derlemek üzere SQL veritabanı projesinde çalıştırarak dotnet build dağıtım yapıtını (.dacpac) oluşturun. İsteğe bağlı olarak, proje derlemesi sırasında kod kalitesini denetlemek için kod çözümleme kuralları yürütür.

  • öğesini dağıtın .dacpac: SqlPackage'ı veya platforma özgü bir görevi kullanarak hedef veritabanına yayımlayın .dacpac . Dağıtım, Doku'da Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, SQL Server veya SQL veritabanını hedefleyebilir.

SQL proje derlemesinden dacpac yapıtına ve veritabanına dağıtımına giden akışı gösteren diyagram.

Bu adımları CI/CD işlem hattınızla tümleştirdiğinizde, veritabanı değişiklikleri her işlemede doğrulanır ve ortamlar arasında tutarlı bir şekilde dağıtılır.

Ortak kavramlar

Yapıt akışı: Tipik bir işlem hattı derleme ve dağıtım aşamalarını ayırır. Derleme aşaması SQL projesini derler ve daha sonra işlem hattı yapıtı olarak yayımlanan bir dosya oluşturur .dacpac . Sonraki bir dağıtım işinde (el ile onay aldıktan sonra), yapıt indirilir ve hedef veritabanına dağıtılır. Bu ayrım, tutarlılık sağlamak için bir kez derlemenize ve aynı yapıtı birden çok ortam için dağıtmanıza olanak tanır.

Yayımlama veya betik: Hassas ortamlara dağıtmadan önce dağıtım planını gözden geçirebilirsiniz. SqlPackage, değişiklik uygulanmadan dağıtım sırasında yürütülecek T-SQL betiğini oluşturan bir Script eylemi destekler. Sağlanan T-SQL betiği, veritabanı yöneticilerinin veya gözden geçirenlerin onaydan önce uygulamak için gereken değişiklikleri tam olarak incelemesine .dacpac olanak tanır. Benzer şekilde, DeployReport eylem planlanan değişikliklerin XML raporunu oluşturur.

Ortam onayları ve geçitleri: Üretim dağıtımları genellikle istenmeyen değişiklikleri önlemek için onay iş akışları gerektirir. Hem GitHub Actions hem de Azure DevOps ortam tabanlı onayları destekler. GitHub'da gerekli gözden geçirenler ve bekleme süreölçerleriyle ortamları yapılandırabilirsiniz. Azure DevOps'ta ortamlar onay geçitlerini, iş saatleri kısıtlamalarını ve diğer dağıtım denetimlerini destekler. Bu denetimler, üretime ulaşmadan önce veritabanı değişikliklerinin gözden geçirilmesini ve onaylanmasını sağlamaya yardımcı olur.

Önkoşullar

SqlPackage platformlar arasıdır ve Windows, Linux ve macOS üzerinde çalışır. Ortamlar arasında tutarlı bir davranış sağlamak için bunu bir .NET genel aracı olarak yükleyin.

  • Derleme aracısı üzerinde yüklü .NET SDK'sı.

  • Derleme aracısına yüklenen SqlPackage. SqlPackage'ı .NET genel aracı olarak yükleyebilirsiniz:

    dotnet tool install --global microsoft.sqlpackage
    

Yazılım teslim platformları

Ekibinizin araç, uyumluluk ve bağlantı gereksinimleriyle eşleşen bir ortam seçin.

Yönetilen sanal ortamlar

GitHub Actions barındırılan çalıştırıcılar ve Azure Pipelines aracıları için Microsoft tarafından yönetilen sanal ortamlar önceden yüklenmiş araçlar içerir:

Çevre .NET SDK SqlPackage
Windows Preinstalled Preinstalled
Linux Preinstalled Önceden yüklenmedi
macOS Preinstalled Önceden yüklenmedi

Linux ve macOS ortamlarında iş akışınızın bir parçası olarak SqlPackage'ı yükleyin. İşlem hatlarında SqlPackage yükleme ve sürüm oluşturma hakkında daha fazla bilgi için bkz. Geliştirme işlem hatlarında SqlPackage.

Şirket içinde barındırılan ortamlar

Ortam üzerinde daha fazla denetime ihtiyacınız olduğunda şirket içinde barındırılan bir çalıştırıcıdan veya aracıdan dağıtın, örneğin:

  • Ağ yalıtımı gereksinimleri (genel İnternet'e açık olmayan veritabanlarına erişme)
  • Özel araçlar veya belirli SqlPackage sürümleri
  • Uyumluluk veya güvenlik ilkeleri

Şirket içinde barındırılan çalıştırıcıları olay odaklı, sunucusuz yürütme için Azure Container Apps işleri olarak dağıtabilirsiniz. Dockerfile içindeki ortamı tanımlamak ve gerektiğinde SqlPackage ve diğer araçları yüklemek için bu yaklaşımı kullanın.

GitHub İşlemleri

Azure SQL Dağıtımı eylemi (azure/sql-action), GITHub Actions çalıştırıcılarından Azure SQL ve .dacpac SQL Server'a SQL projelerini ve dosyalarını dağıtmak için tümleşik bir deneyim sağlar.

Önemli özellikler:

  • , .sqlprojveya .sql betikleri .dacpacdağıtır.
  • SQL kimlik doğrulama, Microsoft Entra Id kimlik doğrulaması ve hizmet sorumlusu kimlik doğrulamalarını destekler.
  • ile azure/loginbirleştirildiğinde Azure SQL Veritabanı için geçici güvenlik duvarı kurallarını otomatik olarak ekler ve kaldırır.
  • Hem Windows hem de Linux çalıştırıcılarında çalışır.

Örnek: GitHub Actions ile SQL projesi dağıtma

# .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'

Geçici güvenlik duvarı kuralı gerektiren Azure SQL Veritabanı dağıtımları için önce sql-actionadımını azure/login ekleyin:

    - 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'

SqlPackage'ı doğrudan herhangi bir çalıştırıcıda da kullanabilirsiniz. Daha fazla bilgi için bkz. Geliştirme işlem hatlarında SqlPackage.

Azure Boru Hatları

Azure DevOps, Dosyaları ve SQL betiklerini Azure SQL Veritabanı'na dağıtmak .dacpac için SqlAzureDacpacDeployment görevini sağlar.

Önemli özellikler:

  • .dacpac Dosyaları dağıtır veya SQL betiklerini yürütür.
  • SQL kimlik doğrulama, Microsoft Entra Id kimlik doğrulaması ve hizmet sorumlusu kimlik doğrulamalarını destekler.
  • Azure SQL Veritabanı için güvenlik duvarı kurallarını otomatik olarak yönetir.
  • Bir Windows aracısı gerektirir (Doğrudan Linux aracılarında SqlPackage kullanın).

Örnek: Azure DevOps ile dağıtma .dacpac

# 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'

Linux aracıları veya dağıtım işlemi üzerinde daha fazla denetim için sqlpackage'ı doğrudan kullanın:

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'

Diğer CI/CD platformları

GitLab CI/CD, Jenkins, CircleCI veya diğerleri gibi platformlar için sql projelerini derlemek ve dağıtmak için doğrudan SqlPackage'ı kullanın.

Projeyi oluştur

dotnet build ./Database.sqlproj -c Release

.dacpac dağıtın

sqlpackage /Action:Publish \
  /SourceFile:./bin/Release/Database.dacpac \
  /TargetConnectionString:"Server=your-server;Database=your-db;User Id=user;Password=password;"