Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
SqlPackage — это программа командной строки, которая автоматизирует несколько задач разработки баз данных и может быть включена в конвейеры CI/CD.
Примечание.
Использование автономной установки SqlPackage для автоматизации конвейера рекомендуется, а не использование исполняемых файлов SqlPackage, входящих в состав других приложений, таких как SQL Server Management Studio или Visual Studio. Автономная установка SqlPackage обновляется чаще и не привязана к частоте выпуска других приложений.
Если SqlPackage установлен как глобальное средство dotnet (рекомендуется), его можно вызвать в конвейере с помощью sqlpackage
из любого каталога. Если SqlPackage установлен как автономный исполняемый файл, необходимо указать полный путь к исполняемому файлу в конвейере. В Windows автономная установка SqlPackage доступна по пути C:\Program Files\Microsoft SQL Server\170\DAC\bin
(DacFx.msi). В средах Windows и Linux при скачивании автономного .zip SqlPackage для .NET можно извлечь исполняемый файл в выбранное расположение.
Управляемые виртуальные среды
Виртуальные среды, используемые для агентов GitHub Actions и образов виртуальных машин Azure Pipelines, управляются в репозитории GitHub runner-images. SqlPackage включается в несколько сред, включая windows-latest
и ubuntu-22.04
, но больше не включается по умолчанию в ubuntu-24.04
и ubuntu-latest
. Обновления образов в runner-images выполняются в течение нескольких недель после каждого выпуска SqlPackage.
В управляемой виртуальной среде вы устанавливаете SqlPackage в конвейере во время выполнения. Установка выполняется как отдельный шаг либо в Azure Pipelines, либо в GitHub Actions и добавляет короткую задержку к каждому запуску конвейера на время установки. Чтобы установить SqlPackage во время выполнения, добавьте шаг в конвейер, использующий dotnet CLI для установки SqlPackage в качестве глобального инструмента. Этот шаг должен выполняться перед любыми действиями SqlPackage в конвейере.
dotnet tool install --global Microsoft.SqlPackage
Перед установкой SqlPackage может потребоваться выполнить шаг настройки .NET, если появится сообщение об ошибке, указывающее на то, что .NET не найден. Используйте интегрированное действие, чтобы настроить его, например задачу UseDotNet в Azure Pipelines или действие setup-dotnet в GitHub Actions.
При необходимости можно указать версию SqlPackage для установки, добавив --version <version>
в команду установки или с помощью --prerelease
флага для установки предварительных версий.
Пример. Шаги по установке SqlPackage в Azure DevOps Pipelines
В Azure DevOps Pipelines можно использовать задачу UseDotNet для установки пакета SDK для .NET, а затем установить SqlPackage в качестве глобального средства. Если вы используете агент Windows, предоставляемый корпорацией Майкрософт, SqlPackage уже установлен в C:\Program Files\Microsoft SQL Server\170\DAC\bin
. Если вы используете локальный агент, вы также можете установить SqlPackage в среде узла и пропустить этот шаг в конвейере.
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '8.x'
- script: dotnet tool install --global Microsoft.SqlPackage --version <version>
displayName: 'Install specific version of SqlPackage'
Пример. Действия по установке SqlPackage в GitHub Actions
В GitHub Actions можно использовать действие setup-dotnet для установки пакета SDK для .NET, а затем установить SqlPackage в качестве глобального средства. Если вы используете средство запуска Windows, предоставляемое GitHub, SqlPackage уже установлено в C:\Program Files\Microsoft SQL Server\170\DAC\bin
. Если вы используете локальный агент выполнения, вы также можете установить SqlPackage в хост-среде и пропустить этот шаг в рабочем процессе.
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.x'
- name: Install SqlPackage
run: dotnet tool install --global Microsoft.SqlPackage --version <version>
Проверка версии SqlPackage
При устранении неполадок очень важно знать, какая версия SqlPackage используется. Получить эти данные можно, добавив в конвейер шаг для выполнения SqlPackage с параметром /version
. Примеры приведены в этой статье на основе управляемых сред Azure DevOps и GitHub, локальные среды могут иметь разные пути установки для рабочего каталога.
Azure Pipelines (система конвейеров Azure)
В Azure Pipeline ключевое слово скрипта возвращает номер версии SqlPackage.
- script: SqlPackage /version
workingDirectory: 'C:\Program Files\Microsoft SQL Server\170\DAC\bin\'
displayName: 'get sqlpackage version'
Действия GitHub
В рабочем процессе GitHub Action ключевое слово run возвращает номер версии SqlPackage.
- name: get sqlpackage version
working-directory: 'C:\Program Files\Microsoft SQL Server\170\DAC\bin\'
run: ./SqlPackage /version
Обновление SqlPackage в агенте конвейера
В некоторых сценариях текущая версия SqlPackage, установленная в среде конвейера, может оказаться недостаточной. Если среда не может быть изменена напрямую, можно использовать дополнительный шаг для установки более новой версии SqlPackage во время выполнения конвейера. Важно выполнить шаг установки перед выполнением любых операций DacPac или BacPac в конвейере. Эту задачу можно объединить с шагом проверки версии, чтобы убедиться, что обновление выполнено.
Azure Pipelines, агент на основе Windows
Когда задача PowerShell используется в Azure Pipeline, шаг можно добавить в Azure Pipeline, который скачивает нужный установщик DacFx и автоматически устанавливает его.
- 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
GitHub Actions, раннер на основе Linux
В рабочем процессе GitHub Action можно использовать ключевое слово run для выполнения dotnet tool
команд для установки, удаления или обновления SqlPackage. В следующем примере показано, как обновить SqlPackage до последней предварительной версии:
- name: Update SqlPackage
run: dotnet tool update --global Microsoft.SqlPackage --prerelease
Виртуальные среды с локальным размещением
В локальной виртуальной среде, например локально размещенном агенте Azure DevOps или GitHub Actions runner, можно установить SqlPackage в хост-среде или установить SqlPackage во время выполнения, как описано в управляемых виртуальных средах. Если установить программу SqlPackage в среде узла, конвейеры, которые выполняются на этом узле, не нужно устанавливать SqlPackage во время выполнения, что поможет ускорить выполнение конвейеров. При установке SqlPackage на узле следует регулярно обновлять SqlPackage для поддержания среды с последней версией.
Задания приложений контейнеров Azure можно использовать для развертывания самостоятельно размещаемых агентов в контейнере, который разворачивается по мере необходимости для каждого вызова рабочего процесса. С помощью заданий "Приложения контейнеров" вы управляете средой, как определено в Dockerfile, и устанавливаете SqlPackage и другие средства по мере необходимости. Локальное средство выполнения можно настроить для запуска в определенной версии SqlPackage, включив шаг установки в образ контейнера. Например, в этом руководстве содержится файл Dockerfile, который устанавливает curl
и jq
.
Мы можем изменить этот пример, чтобы создать образ контейнера, который устанавливает .NET 8.0 и SqlPackage:
FROM ghcr.io/actions/actions-runner:2.323.0
USER root
# install dotnet sdk and sqlpackage
RUN apt-get update && apt-get install -y dotnet-sdk-8.0 && \
dotnet tool install --tool-path /usr/local/bin/ Microsoft.SqlPackage
COPY entrypoint.sh ./entrypoint.sh
RUN chmod +x ./entrypoint.sh
USER runner
ENTRYPOINT ["./entrypoint.sh"]
Отслеживание развертываний
Вы можете записать некоторые файлы, связанные с SqlPackage, чтобы воспроизвести конвейеры и улучшить отслеживание развертывания. Варианты реализации и использования зависят от конкретной архитектуры и среды автоматизации.
DACPAC-файл
Вывод диагностического файла из любого действия: Используйте параметр
/DiagnosticsFile:
в любом действии SqlPackage. Дополнительные сведения см. в разделе «Получение диагностики SqlPackage в агенте конвейера»Выходные данные действия скрипта перед действием опубликования: используйте действие Скрипт SqlPackage перед выполнением действия публикации.
Получение диагностик SqlPackage на агенте конвейера
Диагностические данные из SqlPackage можно получить в командной строке с помощью параметра /DiagnosticsFile
, который доступен для использования в виртуальных средах, таких как Azure Pipelines и GitHub Actions. Диагностическая информация записывается в файл в рабочем каталоге. Имя файла определяется параметром /DiagnosticsFile
.
Azure Pipelines (система конвейеров Azure)
/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
/DiagnosticsFile
Добавление параметра в поле "аргументы" в конфигурации GitHub Action sql-action приводит к записи диагностических сведений 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'