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.

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

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

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

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

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

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

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

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

Azure Pipelines

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

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

GitHub Actions

Ключевое слово run в рабочем процессе GitHub Actions позволяет добавить шаг для вывода номера версии 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