SqlPackage dalam alur pengembangan

SqlPackage adalah utilitas baris perintah yang mengotomatiskan beberapa tugas pengembangan database dan dapat dimasukkan ke dalam alur CI/CD.

Lingkungan virtual

Catatan

Memanfaatkan penginstalan mandiri SqlPackage untuk otomatisasi alur disarankan daripada menggunakan executable SqlPackage yang dibundel dengan aplikasi lain, termasuk SQL Server Management Studio atau Visual Studio. Penginstalan mandiri SqlPackage diperbarui lebih sering dan tidak terkait dengan irama rilis aplikasi lain.

Di Windows, instalasi mandiri SqlPackage tersedia di jalur C:\Program Files\Microsoft SQL Server\160\DAC\bin (DacFx.msi) atau %USERPROFILE%\.dotnet\tools (alat dotnet). Di Linux, penginstalan mandiri SqlPackage tersedia di jalur ~/.dotnet/tools (alat dotnet). Di lingkungan Windows dan Linux, jika Anda mengunduh .zip SqlPackage mandiri untuk .NET Core, Anda dapat mengekstrak yang dapat dieksekusi ke lokasi yang Anda pilih.

Lingkungan virtual terkelola

Lingkungan virtual yang digunakan untuk runner yang dihosting GitHub Actions dan gambar VM Azure Pipelines dikelola di repositori GitHub runner-images . SqlPackage disertakan dalam beberapa lingkungan termasuk windows-latest dan ubuntu-latest. Pembaruan pada gambar dalam gambar runner dibuat dalam beberapa minggu dari setiap rilis SqlPackage.

Lingkungan virtual yang dihost sendiri

Jika Anda menggunakan SqlPackage di lingkungan virtual yang dihost sendiri seperti agen Azure DevOps yang dihost sendiri, disarankan untuk memperbarui aplikasi secara teratur untuk mempertahankan lingkungan dengan versi terbaru.

Melacak penyebaran

Ada beberapa file yang terkait dengan SqlPackage yang dapat ditangkap sebagai artefak alur untuk membuat reproduksi eksekusi alur dan meningkatkan pelacakan penyebaran. Implementasi dan kasus penggunaan bervariasi tergantung pada arsitektur dan lingkungan otomatisasi spesifik Anda.

  • File Dacpac
  • Output file diagnostik dari tindakan apa pun: Gunakan /DiagnosticsFile: parameter pada tindakan SqlPackage apa pun, lihat contoh di bawah ini
  • Output dari tindakan skrip sebelum menerbitkan tindakan: Gunakan tindakan Script SqlPackage sebelum memanggil tindakan terbitkan

Contoh SqlPackage lainnya

Memeriksa versi SqlPackage

Selama upaya pemecahan masalah, penting untuk mengetahui versi SqlPackage sedang digunakan. Menangkap informasi ini dapat dilakukan dengan menambahkan langkah ke alur untuk menjalankan SqlPackage dengan /version parameter . Contoh diberikan di bawah ini berdasarkan lingkungan terkelola Microsoft dan GitHub, lingkungan yang dihost sendiri mungkin memiliki jalur penginstalan yang berbeda untuk direktori kerja.

Azure Pipelines

Saat kata kunci skrip digunakan dalam Azure Pipeline, langkah dapat ditambahkan ke Azure Pipeline yang menghasilkan nomor versi SqlPackage.

- script: SqlPackage /version
  workingDirectory: C:\Program Files\Microsoft SQL Server\160\DAC\bin\
  displayName: 'get sqlpackage version'

GitHub Actions

Dengan menggunakan kata kunci eksekusi dalam alur kerja GitHub Action, langkah dapat ditambahkan ke GitHub Action yang menghasilkan nomor versi SqlPackage.

- name: get sqlpackage version
  working-directory: C:\Program Files\Microsoft SQL Server\160\DAC\bin\
  run: ./SqlPackage /version

Output tindakan GitHub menampilkan nomor build 15.0.4897.1

Mendapatkan diagnostik SqlPackage dalam agen alur

Informasi diagnostik dari SqlPackage tersedia di baris perintah melalui parameter /DiagnosticsFile, yang dapat digunakan di lingkungan virtual seperti Azure Pipelines dan GitHub Actions. Informasi diagnostik ditulis ke file di direktori kerja. Nama file ditentukan oleh /DiagnosticsFile parameter .

Azure Pipelines

/DiagnosticsFile Menambahkan parameter ke bidang "Argumen SqlPackage Tambahan" di konfigurasi Azure Pipeline SqlAzureDacpacDeployment akan menyebabkan informasi diagnostik SqlPackage ditulis ke file yang ditentukan. Mengikuti tugas SqlAzureDacpacDeployment, file diagnostik dapat tersedia di luar lingkungan virtual dengan menerbitkan artefak alur seperti yang terlihat dalam contoh di bawah ini.

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

Setelah eksekusi alur, file diagnostik dapat diunduh dari halaman ringkasan eksekusi di bawah "Artefak yang Diterbitkan".

GitHub Actions

/DiagnosticsFile Menambahkan parameter ke bidang "argumen" di konfigurasi tindakan sql Tindakan GitHub akan menyebabkan informasi diagnostik SqlPackage ditulis ke file yang ditentukan. Setelah tugas tindakan sql, file diagnostik dapat disediakan di luar lingkungan virtual dengan menerbitkan artefak seperti yang terlihat dalam contoh di bawah ini.

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

Memperbarui SqlPackage pada agen alur

Dalam beberapa skenario, versi SqlPackage saat ini yang diinstal di lingkungan alur mungkin tidak cukup. Jika lingkungan tidak dapat dimodifikasi secara langsung, langkah tambahan dapat digunakan untuk menginstal versi SqlPackage yang lebih baru selama eksekusi alur. Penting untuk menjalankan langkah penginstalan sebelum menjalankan operasi DacPac atau BacPac dalam alur. Tugas ini dapat dikombinasikan dengan langkah untuk memeriksa versi untuk memastikan bahwa peningkatan selesai seperti yang diharapkan.

Azure Pipelines

Saat tugas PowerShell digunakan dalam Azure Pipeline, langkah dapat ditambahkan ke Azure Pipeline yang mengunduh MSI yang diinginkan dan menginstalnya secara diam-diam.

- 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

Langkah berikutnya