Руководство. Развертывание приложения ASP.NET Core и базы данных в приложениях контейнеров Azure с помощью GitHub Actions

В этом руководстве описано, как развернуть приложение ASP.NET Core и База данных SQL в приложениях контейнеров Azure с помощью Visual Studio и GitHub Actions. Вы также узнаете, как управлять миграцией Entity Framework и обновлениями базы данных в GitHub Actions, хотя основные понятия также можно применять к другим средствам и средам CI/CD.

Необходимые компоненты

Вам потребуется установить Visual Studio 2022 с помощью ASP.NET и веб-разработки и рабочей нагрузки разработки Azure.

Если вы уже установили Visual Studio:

  • Установите последние обновления для Visual Studio, выбрав Справка>Проверить обновления.
  • Убедитесь, что установлены ASP.NET и веб-разработки, а также рабочие нагрузки разработки Azure, выбрав "Сервис>получения средств и компонентов".

Настройка примера приложения локально

Используйте пример приложения ToDo, чтобы следовать вместе с этим руководством. Чтобы клонировать приложение из GitHub, выполните следующую команду.

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

Перейдите в папку DotNetCoreSqlDb.sln проекта и откройте решение в Visual Studio.

Приложение ToDo готово к работе, но вам потребуется установить подключение к localdb СЕРВЕРУ SQL Server, доступному в Visual Studio. Подключение, чтобы localdb позволить запускать приложение и сохранять додосы во время локальной работы.

  1. Щелкните правой кнопкой мыши узел Подключение служб в обозревателе решений Visual Studio и выберите "Добавить > базу данных SQL Server".
  2. В диалоговом окне Подключение зависимостей выберите SQL Server Express LocalDB (Local) и нажмите кнопку "Далее".
  3. В диалоговом окне Подключение sql Server Express LocalDB (Local) задайте следующие значения:
    • имя строки Подключение ion: оставьте значение по умолчанию.
    • строковое значение Подключение ion: оставьте значение по умолчанию.
    • Сохраните значение строка подключения в: выберите "Нет".
    • Выберите Далее
  4. На экране "Сводка изменений" оставьте параметры по умолчанию и нажмите кнопку "Готово", чтобы завершить рабочий процесс.

Visual Studio отображает сводку по зависимостям службы, включая подключение к LocalDB.

A screenshot showing how to add a migration using Visual Studio.

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

  1. Щелкните значок ...справа от списка зависимостей службы рядом с подключением LocalDB и нажмите кнопку "Добавить миграцию".
  2. В диалоговом окне "Миграция Entity Framework" подождите, пока Visual Studio найдите DbContext класс, включенный в проект. После загрузки значений нажмите кнопку Готово.
  3. Visual Studio создает Migrations папку в проекте и создает начальный класс миграции. Этот класс можно использовать для обновления базы данных с правильной схемой.
  4. Щелкните значок ...рядом со службой LocalDB и нажмите кнопку "Обновить базу данных".
  5. В диалоговом окне "Миграция Entity Framework" подождите, пока Visual Studio снова найдите DbContext класс, а затем нажмите кнопку "Готово". Visual Studio запускает миграцию и создает схему для базы данных на сервере LocalDB .

Запустите проект, нажав кнопку запуска DotNetCoreSqlDb в верхней части Visual Studio.

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

Изучение конфигурации запуска приложения

Пример приложения содержит следующий код в Program.cs файле:

if(builder.Environment.IsDevelopment())
{
    builder.Services.AddDbContext<MyDatabaseContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
}
else
{
    builder.Services.AddDbContext<MyDatabaseContext>(options =>
        options.UseSqlServer(Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")));
}

Этот код применяет следующие конфигурации:

  • При локальном localdb запуске приложения строка подключения извлекается из appsettings.json файла и предоставляется Entity Framework. Эта конфигурация позволяет localdb строка подключения проверка в управление версиями, чтобы другие разработчики могли легко подключаться к локальной базе данных во время разработки. Она также позволяет выполнять миграцию Entity Framework локально. По умолчанию Entity Framework не обнаруживает строка подключения, хранящихся в переменной среды при выполнении миграций.
  • Когда приложение выполняется в рабочих процессах GitHub Actions или в рабочей среде, строка подключения извлекается из переменных среды. Переменные среды могут предотвратить проверка рабочих безопасных строка подключения в систему управления версиями или включаться в файлы конфигурации.

Создание служб Azure

Приложению потребуется создать следующие службы Azure для успешного развертывания:

  • Приложение-контейнер: требуется для размещения и запуска развернутого приложения.
  • Реестр контейнеров: хранит встроенный артефакт образа контейнерного приложения.
  • База данных SQL. База данных SQL Azure для хранения данных приложения.

Функции публикации Visual Studio могут обрабатывать создание этих ресурсов.

Создание приложения контейнера Azure и Реестр контейнеров Azure

  1. В обозревателе решений Visual Studio щелкните правой кнопкой мыши узел проекта верхнего уровня и выберите "Опубликовать".

  2. В диалоговом окне публикации выберите Azure в качестве цели развертывания, а затем нажмите кнопку Далее.

  3. В качестве целевой платформы выберите Контейнеры приложений Azure (Linux) и нажмите кнопку Далее.

  4. Создайте новое приложение-контейнер для развертывания. Нажмите кнопку +Создать, чтобы открыть новое диалоговое окно и введите следующие значения:

    A screenshot showing how to create a container app.

    • Имя приложения-контейнера: оставьте значение по умолчанию или введите имя.
    • Имя подписки: выберите подписку для развертывания.
    • Группа ресурсов: выберите "Создать " и создайте новую группу ресурсов с именем msdocs-app-db-ef.
    • Среда приложений контейнеров: выберите "Создать ", чтобы открыть диалоговое окно среды приложений контейнеров и введите следующие значения:
      • Имя приложения: оставьте значение по умолчанию.
      • Расположение: выберите ближайшее расположение.
      • Рабочая область Azure Log Analytics: выберите Создать, чтобы открыть диалоговое окно рабочей области Log Analytics.
        • Имя: оставьте значение по умолчанию.
        • Расположение: выберите ближайшее расположение и нажмите кнопку ОК, чтобы закрыть диалоговое окно.
      • Нажмите кнопку ОК, чтобы закрыть диалоговое окно среды приложений-контейнеров.
    • Нажмите кнопку Создать, чтобы закрыть исходное диалоговое окно приложений-контейнеров. Visual Studio создает ресурс приложения-контейнера в Azure.
  5. После создания ресурса убедитесь в том, что он выбран в списке приложений-контейнеров, а затем нажмите кнопку Далее.

  6. Вам потребуется создать Реестр контейнеров Azure для хранения опубликованного артефакта образа для приложения. Щелкните зеленый значок + на экране реестра контейнеров.

    A screenshot showing how to create a new container registry.

  7. Оставьте значения по умолчанию и нажмите кнопку Создать.

  8. После создания реестра контейнеров убедитесь, что он выбран, а затем нажмите кнопку "Далее".

  9. На экране типа развертывания выберите CI/CD с помощью рабочих процессов GitHub Actions (создает файл yml) и нажмите кнопку Готово. Если в Visual Studio появляется запрос на то, чтобы разрешить администратору доступ к опубликованному контейнеру Docker, выберите Да.

Visual Studio создает и отображает профиль публикации. Большинство шагов публикации и подробностей описаны в файле GitHub Actions .yml , который можно просмотреть, нажав кнопку "Изменить рабочий процесс " в представлении сводки профиля публикации. Этот файл подробно рассматривается далее в статье.

Создание базы данных SQL Azure

  1. В обозревателе решений щелкните правой кнопкой мыши узел Подключение ed Services и выберите "Добавить > базу данных SQL Server".
  2. В диалоговом окне Подключение зависимостей выберите База данных SQL Azure и нажмите кнопку "Далее".
  3. Нажмите кнопку "+ Создать" , чтобы добавить новую базу данных.
  4. В диалоговом окне База данных SQL Azure введите следующие значения:
    • Имя базы данных: оставьте значение по умолчанию.
    • Имя подписки: выберите ту же подписку, что и ранее.
    • Группа ресурсов: выберите ту же группу, созданную msdocs-app-db-ef ранее.
    • Сервер базы данных: нажмите кнопку "Создать" и введите следующие значения в новом всплывающем итоге:
      • Имя сервера базы данных: введите уникальное имя сервера или добавьте случайные числа в конец автогенерированного имени.
      • Расположение. Выберите близкое к вам расположение.
      • имя пользователя Администратор istrator: введите значение выбранного значения.
      • Администратор istrator password: введите значение выбранного параметра.
      • пароль Администратор istrator (подтверждение): введите тот же пароль для подтверждения. Нажмите кнопку "ОК", чтобы закрыть диалоговое окно SQL Server
    • Выберите "Создать", чтобы создать SQL Server и базу данных.
    • После завершения операции выберите сервер из списка и нажмите кнопку "Далее"
  5. В диалоговом окне Подключение База данных SQL Azure оставьте значения по умолчанию, но убедитесь, что none выбран в нижней части значения "Сохранить строка подключения" в параметре.
  6. Выберите " Готово " и Visual Studio создаст ресурсы SQL.

Подключение приложение контейнера в SQL Azure

  1. На странице обзора созданного приложения-контейнера выберите службу Подключение or (предварительная версия) в области навигации слева.

  2. Нажмите кнопку +Создать , чтобы создать новое подключение.

  3. В всплывающем элементе "Создание подключения" введите следующие значения:

    • Контейнер. Выберите созданный контейнер dotnetcoresqldb .

    • Тип службы: выберите База данных SQL.

    • Подписка. Выберите ту же подписку, которую вы использовали для создания приложения-контейнера.

    • Имя подключения: оставьте значение по умолчанию.

    • SQL Server: выберите сервер базы данных, созданный ранее.

    • База данных SQL: выберите созданную ранее базу данных.

    • Тип клиента: выберите .NET.

      A screenshot showing how to use service connector.

  4. Нажмите кнопку "Далее": проверка подлинности и ввод следующих значений:

    • Выберите строку Подключение ion для типа проверки подлинности.
    • Имя пользователя: введите имя пользователя, используемое при создании сервера базы данных.
    • Пароль. Введите пароль, используемый при создании сервера базы данных.
  5. Оставьте остальные параметры по умолчанию и нажмите кнопку "Далее: Сеть".

  6. Оставьте значение по умолчанию выбранным и нажмите кнопку "Далее: проверка и создание".

  7. После проверки Azure нажмите кнопку "Создать".

Через некоторое время должно появиться подключение к базе данных SQL. Щелкните стрелку, чтобы развернуть подключение и просмотреть значение AZURE_SQL_CONNECTIONSTRING . Это имя подключения соответствует имени переменной среды строка подключения, определенной в примере приложения.

Настройка рабочего процесса GitHub Actions

Файл рабочего процесса GitHub Actions, созданный Visual Studio, можно использовать GitHub для создания и развертывания приложения в Azure при отправке изменений. В настоящее время этот процесс будет работать, но развернутое приложение вызовет исключение. Несмотря на создание базы данных SQL Azure, необходимо добавить шаг в рабочий процесс GitHub Actions для создания схемы. Строка подключения для базы данных SQL Azure можно безопасно хранить в качестве секрета в GitHub и получать рабочим процессом при запуске.

Получение строка подключения и добавление его в секреты GitHub

  1. В портал Azure найдите базу данных, созданную в главной строке поиска, и выберите ее из результатов.

  2. На странице обзора базы данных выберите строки Подключение ion в области навигации слева.

  3. На вкладке ADO.NET скопируйте строка подключения из поля формы.

    A screenshot showing how to retrieve the connection string.

  4. Перейдите в вилку репозитория GitHub приложения.

  5. На вкладке Параметры выберите "Действия секретов>" в области навигации слева и выберите новый секрет репозитория.

  6. На странице "Создать секрет" введите следующие значения:

    • Имя: введите имя DbConnection.

    • Секрет. Вставьте строка подключения, скопированные из Azure. Обязательно замените заполнитель пароля в строка подключения паролем, выбранным при создании базы данных.

    • Выберите Добавить секрет.

      A screenshot showing how to create a GitHub secret.

Теперь строка подключения безопасно хранятся в секретах репозитория GitHub и могут быть получены с помощью рабочего процесса GitHub.

Изменение рабочего процесса GitHub Actions для включения миграций

  1. Откройте файл рабочего процесса .yml GitHub Actions, созданный Visual Studio, нажав кнопку "Изменить рабочий процесс " на странице сводки публикации.

    A screenshot showing how to edit the workflow.

  2. Добавьте следующий yaml в конец файла рабочего процесса:

    - name: Run EF 
      run: | 
        dotnet tool install --global dotnet-ef
        dotnet tool restore
        dotnet ef database update -p DotNetCoreSqlDb --connection '${{ secrets.DBConnection }}'
    

    Этот код устанавливает средства командной строки платформы сущностей и запускает миграцию приложений. При выполнении рабочего процесса код также использует connection параметр database update команды для переопределения localdb строка подключения, хранящегося в appsettings.json файле со значением, добавленным в секреты GitHub.

Запустите рабочий процесс GitHub Actions и протестируйте развертывание

  1. Зафиксируйте изменения в приложении и отправьте в вилку репозитория с помощью следующей команды:

    git add --all
    git commit -m "Added GitHub Actions workflow"
    git push
    
  2. Перейдите к репозиторию GitHub и перейдите на вкладку "Действия ". Запуск рабочего процесса должен активироваться автоматически, если отправка выполнена успешно.

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

    A screenshot showing the GitHub action workflow.

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

Вы можете протестировать развертывание, перейдя на домашнюю страницу приложения-контейнера и создав тодо, как и вы сделали локально. Url-адрес приложения контейнера можно найти на странице обзора приложения в портал Azure.