Автоматизация проектов SQL

Область применения:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL Azure

В этой статье представлен обзор вариантов автоматизации проектов SQL на разных платформах доставки программного обеспечения. Используйте автоматизацию для интеграции проектов базы данных SQL в конвейеры CI/CD и последовательного и многократного развертывания изменений базы данных.

Что автоматизировать

Автоматизация проектов SQL обычно включает две ключевые задачи в конвейере CI/CD:

  • Создайте проект SQL: проверьте проект и создайте артефакт развертывания (.dacpac) путем выполнения dotnet build в проекте базы данных SQL для компиляции. При необходимости выполните правила анализа кода для проверки качества кода во время сборки проекта.

  • .dacpacРазверните: опубликуйте .dacpac целевую базу данных с помощью SqlPackage или конкретной задачи для платформы. Развертывание может предназначено для Базы данных SQL Azure, Управляемого экземпляра SQL Azure, SQL Server или базы данных SQL в Fabric.

Схема, показывающая поток из сборки проекта SQL в артефакт dacpac и развертывание в базе данных.

При интеграции этих шагов в конвейер CI/CD изменения базы данных проверяются при каждой фиксации и последовательном развертывании в разных средах.

Общие понятия

Поток артефактов: типичный конвейер отделяет этапы сборки и развертывания. Этап сборки компилирует проект SQL и создает .dacpac файл, который затем публикуется в качестве артефакта конвейера. В последующем задании развертывания (потенциально после утверждения вручную) артефакт загружается и развертывается в целевой базе данных. Это разделение позволяет создавать один раз и развертывать один артефакт в нескольких средах, обеспечивая согласованность.

Публикация или сценарий. Перед развертыванием в конфиденциальных средах можно просмотреть план развертывания. SqlPackage поддерживает Script действие, которое создает скрипт T-SQL, который будет выполняться во время развертывания без применения изменений. Предоставленный скрипт T-SQL позволяет администраторам базы данных или рецензентам проверять точные изменения, необходимые для применения перед утверждением .dacpac . Аналогичным образом действие DeployReport создает XML-отчет о запланированных изменениях.

Утверждения среды и шлюзы. Для рабочих развертываний обычно требуются рабочие процессы утверждения, чтобы предотвратить непредвиденные изменения. GitHub Actions и Azure DevOps поддерживают утверждения на основе среды. В GitHub можно настроить среды с необходимыми рецензентами и таймерами ожидания. В Azure DevOps среды поддерживают шлюзы утверждения, ограничения рабочих часов и другие элементы управления развертыванием. Эти элементы управления помогают убедиться, что изменения базы данных проверяются и утверждены перед достижением рабочей среды.

Предпосылки

SqlPackage является кроссплатформенным и работает в Windows, Linux и macOS. Установите его как глобальное средство .NET, чтобы обеспечить согласованное поведение в разных средах.

  • Пакет SDK для .NET , установленный в агенте сборки.

  • SqlPackage , установленный в агенте сборки. SqlPackage можно установить как глобальное средство .NET:

    dotnet tool install --global microsoft.sqlpackage
    

Платформы доставки программного обеспечения

Выберите среду, которая соответствует требованиям к оборудованию, соответствию и подключению вашей команды.

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

Управляемые корпорацией Майкрософт виртуальные среды для размещенных в GitHub Actions средств выполнения и агентов Azure Pipelines включают предварительно установленные средства:

Окружающая среда Пакет SDK для .NET SqlPackage
Виндоус Preinstalled Preinstalled
Линукс Preinstalled Не предустановлено
macOS Preinstalled Не предустановлено

В средах Linux и macOS установите SqlPackage в рамках рабочего процесса. Дополнительные сведения об установке и использовании версий SqlPackage в конвейерах см. в sqlPackage в конвейерах разработки.

Локальные среды

Развертывание из локального runner или агента, если требуется больше контроля над средой, например:

  • Требования к изоляции сети (доступ к базам данных, не предоставляемым общедоступному Интернету)
  • Пользовательские средства или определенные версии SqlPackage
  • Политики соответствия или безопасности

Вы можете развертывать локальные запуски в качестве заданий приложений контейнеров Azure для выполнения на основе событий, бессерверного выполнения. Используйте этот подход для определения среды в Dockerfile и установки SqlPackage и других средств по мере необходимости.

Действия GitHub

Действие развертывания SQL Azure (azure/sql-action) предоставляет интегрированный интерфейс для развертывания проектов и .dacpac файлов SQL в Azure SQL и SQL Server из любого средства выполнения действий GitHub.

Ключевые возможности:

  • Развертывает .dacpac, .sqlprojили .sql скрипты.
  • Поддерживает проверку подлинности SQL, проверку подлинности Идентификатора Microsoft Entra и проверку подлинности субъекта-службы.
  • Автоматически добавляет и удаляет временные правила брандмауэра для базы данных SQL Azure при сочетании с azure/loginним.
  • Работает как на запусках Windows, так и в Linux.

Пример. Развертывание проекта SQL с помощью GitHub Actions

# .github/workflows/sql-deploy.yml
on: [push]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - uses: azure/sql-action@v2
      with:
        connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
        path: './Database.sqlproj'
        action: 'publish'

Для развертываний базы данных SQL Azure, требующих временного правила брандмауэра, добавьте azure/login шаг перед sql-action:

    - uses: azure/login@v2
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}

    - uses: azure/sql-action@v2
      with:
        connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
        path: './Database.dacpac'
        action: 'publish'

Вы также можете использовать SqlPackage непосредственно на любом средстве выполнения. Дополнительные сведения см. в статье SqlPackage в конвейерах разработки.

Azure Pipelines (система конвейеров Azure)

Azure DevOps предоставляет задачу SqlAzureDacpacDeployment для развертывания .dacpac файлов и скриптов SQL в Базе данных SQL Azure.

Ключевые возможности:

  • Развертывает .dacpac файлы или выполняет скрипты SQL.
  • Поддерживает проверку подлинности SQL, проверку подлинности Идентификатора Microsoft Entra и проверку подлинности субъекта-службы.
  • Автоматически управляет правилами брандмауэра для базы данных SQL Azure.
  • Требуется агент Windows (используйте SqlPackage непосредственно в агентах Linux).

Пример. Развертывание .dacpac с помощью Azure DevOps

# azure-pipelines.yml
trigger:
  - main

pool:
  vmImage: 'windows-latest'

steps:
- task: SqlAzureDacpacDeployment@1
  inputs:
    azureSubscription: 'your-service-connection'
    AuthenticationType: 'server'
    ServerName: 'your-server.database.windows.net'
    DatabaseName: 'your-database'
    SqlUsername: '$(SqlUser)'
    SqlPassword: '$(SqlPassword)'
    deployType: 'DacpacTask'
    DeploymentAction: 'Publish'
    DacpacFile: '$(Build.ArtifactStagingDirectory)/Database.dacpac'

Для агентов Linux или более контроля над процессом развертывания используйте SqlPackage напрямую:

steps:
- task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '8.x'

- script: dotnet tool install --global microsoft.sqlpackage
  displayName: 'Install SqlPackage'

- script: |
    sqlpackage /Action:Publish \
      /SourceFile:$(Build.ArtifactStagingDirectory)/Database.dacpac \
      /TargetConnectionString:"$(ConnectionString)"
  displayName: 'Deploy database'

Другие платформы CI/CD

Для таких платформ, как GitLab CI/CD, Jenkins, CircleCI или другие, используйте SqlPackage непосредственно для создания и развертывания проектов SQL.

Сборка проекта

dotnet build ./Database.sqlproj -c Release

Разверните .dacpac

sqlpackage /Action:Publish \
  /SourceFile:./bin/Release/Database.dacpac \
  /TargetConnectionString:"Server=your-server;Database=your-db;User Id=user;Password=password;"