Partage via


SqlPackage dans les pipelines de développement

SqlPackage est un utilitaire en ligne de commande qui permet d’automatiser plusieurs tâches de développement de bases de données. Il peut être intégré dans des pipelines CI/CD.

Environnements virtuels

Notes

Il est recommandé d'utiliser une installation autonome de SqlPackage pour l'automatisation des pipelines plutôt que d'utiliser les exécutables SqlPackage intégrés à d'autres applications, notamment SQL Server Management Studio ou Visual Studio. L'installation autonome de SqlPackage est mise à jour plus fréquemment et n'est pas liée à la cadence de publication d'autres applications.

Sur Windows, l'installation autonome de SqlPackage est disponible via le chemin d’accès C:\Program Files\Microsoft SQL Server\160\DAC\bin (DacFx.msi) ou %USERPROFILE%\.dotnet\tools (outil dotnet). Sur Linux, l'installation autonome de SqlPackage est disponible via le chemin d'accès ~/.dotnet/tools (outil dotnet). Dans les environnements Windows et Linux, si vous téléchargez le fichier autonome .zip SqlPackage for .NET Core, vous pouvez extraire l'exécutable dans l'emplacement de votre choix.

Environnements virtuels gérés

Les environnements virtuels utilisés pour les exécuteurs hébergés GitHub Actions et les images de machines virtuelles Azure Pipelines sont gérés dans le référentiel GitHub runner-images. SqlPackage est inclus dans plusieurs environnements, notamment windows-latest et ubuntu-latest. Les mises à jour des images dans runner-images sont effectuées dans les semaines qui suivent la publication d’une nouvelle version de SqlPackage.

Environnements virtuels autohébergés

Dans un environnement virtuel autohébergé comme agent Azure DevOps autohébergé, mettez à jour l’application régulièrement pour que l’environnement soit toujours à la version la plus récente.

Suivi des déploiements

Vous pouvez capturer certains fichiers liés à SqlPackage pour reproduire des pipelines et améliorer le suivi du déploiement. L’implémentation et les cas d’usage dépendent de votre architecture et de votre environnement d’automatisation spécifiques.

  • Fichier DACPAC
  • Sortie de fichier de diagnostic à partir de n’importe quelle action : utilisez le paramètre /DiagnosticsFile: sur n’importe quelle action SqlPackage, voir Obtenir les diagnostics SqlPackage dans un agent de pipeline
  • Sortie de l’action de script avant l’action de publication : utiliser l’action SqlPackage Script avant d’invoquer une action de publication

Autres exemples SqlPackage

Vérification de la version de SqlPackage

Lors de la résolution des problèmes, il est important de connaître la version de SqlPackage utilisée. Pour capturer cette information, vous pouvez ajouter une étape au pipeline afin d’exécuter SqlPackage avec le paramètre /version. Des exemples sont donnés ci-dessous pour les environnements gérés Microsoft et GitHub. Les environnements auto-hébergés peuvent présenter des chemins d’installation différents pour le répertoire de travail.

Azure Pipelines

Dans un pipeline Azure, le mot clé script retourne le numéro de version sqlPackage.

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

Actions GitHub

Dans un flux de travail GitHub Action, le mot clé run retourne le numéro de version sqlPackage.

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

Sortie d’une action GitHub Actions indiquant le numéro de build 15.0.4897.1

Obtenir les diagnostics SqlPackage dans un agent de pipeline

Les informations de diagnostic SqlPackage sont disponibles dans la ligne de commande via le paramètre /DiagnosticsFile, qui peut être utilisé dans des environnements virtuels comme Azure Pipelines et GitHub Actions. Les informations de diagnostic sont écrites dans un fichier dans le répertoire de travail. Le nom de fichier est dicté par le paramètre /DiagnosticsFile.

Azure Pipelines

L’ajout du paramètre /DiagnosticsFile au champ « Arguments SqlPackage supplémentaires » dans la configuration SqlAzureDacpacDeployment de pipeline Azure entraîne l’écriture des informations de diagnostic SqlPackage dans le fichier spécifié. Après la tâche SqlAzureDacpacDeployment, le fichier de diagnostic peut être rendu disponible en dehors de l’environnement virtuel en publiant un artefact de pipeline comme indiqué dans l’exemple ci-dessous.

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

Après l’exécution du pipeline, le fichier de diagnostic peut être téléchargé à partir de la page Résumé d’exécution sous « Artefacts publiés ».

GitHub Actions

L’ajout du paramètre /DiagnosticsFile au champ « Arguments » dans la configuration sql-action de GitHub action entraîne l’écriture des informations de diagnostic SqlPackage dans le fichier spécifié. Après la tâche sql-action, le fichier de diagnostic peut être rendu disponible en dehors de l’environnement virtuel en publiant un artefact comme indiqué dans l’exemple ci-dessous.

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

Mettre à jour SqlPackage sur l’agent de pipeline

Dans certains scénarios, la version actuelle de SqlPackage installée dans l’environnement de pipeline peut être insuffisante. Si l’environnement ne peut pas être modifié directement, une étape supplémentaire peut être utilisée pour installer une version plus récente de SqlPackage lors de l’exécution de pipeline. Il est important d’exécuter l’étape d’installation avant toute opération DacPac ou BacPac dans le pipeline. Cette tâche peut être associée à une étape pour vérifier la version et s’assurer que la mise à niveau s’est terminée comme prévu.

Azure Pipelines

En utilisant la tâche PowerShell dans un pipeline Azure, vous pouvez ajouter une étape à un pipeline Azure qui télécharge le MSI souhaité et l’installe en mode silencieux.

- 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

Étapes suivantes