SqlPackage в конвейерах разработки

SqlPackage — это программа командной строки, которая автоматизирует несколько задач разработки баз данных и может быть включена в конвейеры CI/CD.

Виртуальные среды

Примечание.

Использование автономной установки SqlPackage для автоматизации конвейера рекомендуется использовать исполняемые файлы SqlPackage, упакованные с другими приложениями, включая SQL Server Management Studio или Visual Studio. Автономная установка SqlPackage обновляется чаще и не привязана к частоте выпуска других приложений.

В Windows автономная установка SqlPackage доступна по пути C:\Program Files\Microsoft SQL Server\160\DAC\bin (DacFx.msi) или %USERPROFILE%\.dotnet\tools (инструмент dotnet). В Linux автономная установка SqlPackage доступна по пути ~/.dotnet/tools (средство dotnet). В средах Windows и Linux при скачивании автономного .zip SqlPackage для .NET Core можно извлечь исполняемый файл в выбранное расположение.

Управляемые виртуальные среды

Виртуальные среды, используемые для размещенных средств выполнения GitHub Actions и образов виртуальных машин Azure Pipelines, управляются в репозитории GitHub для запуска образов. SqlPackage входит в состав нескольких сред, в том числе windows-latest и ubuntu-latest. Обновления образов в runner-images выполняются в течение нескольких недель после каждого выпуска SqlPackage.

Виртуальные среды с локальным размещением

В локальной виртуальной среде, такой как локальный агент Azure DevOps, регулярно обновляет приложение , чтобы поддерживать среду с последней версией.

Отслеживание развертываний

Вы можете записать некоторые файлы, связанные с SqlPackage, чтобы воспроизвести конвейеры и улучшить отслеживание развертывания. Варианты реализации и использования зависят от конкретной архитектуры и среды автоматизации.

  • DACPAC-файл
  • Выходные данные файла диагностики из любого действия: используйте /DiagnosticsFile: параметр в любом действии SqlPackage, см. статью Get SqlPackage диагностика в агенте конвейера.
  • Выходные данные действия скрипта перед действием публикации: используйте действие Скрипт SqlPackage перед вызовом действия публикации.

Другие примеры SqlPackage

Проверка версии SqlPackage

При устранении неполадок очень важно знать, какая версия SqlPackage используется. Получить эти данные можно, добавив в конвейер шаг для выполнения SqlPackage с параметром /version. Ниже приведены примеры на основе управляемых сред Майкрософт и GitHub. В средах с самостоятельным размещением могут использоваться другие пути установки для рабочего каталога.

Azure Pipelines

В Azure Pipeline ключевое слово скрипта возвращает номер версии SqlPackage.

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

GitHub Actions

В рабочем процессе GitHub Action ключевое слово run возвращает номер версии SqlPackage.

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

Выходные данные действия GitHub с отображением номера версии 15.0.4897.1

Получение диагностика SqlPackage в агенте конвейера

Диагностические данные из SqlPackage можно получить в командной строке с помощью параметра /DiagnosticsFile, который доступен для использования в виртуальных средах, таких как Azure Pipelines и GitHub Actions. Диагностическая информация записывается в файл в рабочем каталоге. Имя файла определяется параметром /DiagnosticsFile.

Azure Pipelines

/DiagnosticsFile Добавление параметра в поле "Дополнительные аргументы SqlPackage" в конфигурации Azure Pipeline SqlAzureDacpacDeployment приведет к записи диагностических сведений SqlPackage в указанный файл. После выполнения задачи SqlAzureDacpacDeployment файл диагностики можно сделать доступным за пределами виртуальной среды, опубликовав артефакт конвейера, как показано в примере ниже.

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

После выполнения конвейера файл диагностики можно скачать на странице сводки по запуску в разделе опубликованных артефактов.

GitHub Actions

Если вы добавите параметр /DiagnosticsFile в поле "arguments" (Аргументы) в конфигурации sql-action GitHub Actions, данные диагностики SqlPackage будут записаны в указанный файл. После выполнения задачи sql-action файл диагностики можно сделать доступным за пределами виртуальной среды, опубликовав артефакт, как показано в примере ниже.

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

Обновление SqlPackage в агенте конвейера

В некоторых случаях текущая версия SqlPackage, установленная в среде конвейера, может быть недостаточной. Если среду нельзя изменить напрямую, можно использовать дополнительный шаг для установки более новой версии SqlPackage во время выполнения конвейера. Важно выполнить шаг установки перед выполнением любых операций DacPac или BacPac в конвейере. Эту задачу можно объединить с шагом проверки версии, чтобы убедиться, что обновление выполнено.

Azure Pipelines

Когда используется задача PowerShell, можно добавить в конвейер Azure шаг, который загружает нужный MSI и автоматически устанавливает его.

- 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

Следующие шаги

  • Дополнительные сведения о SqlPackage