Краткое руководство: использование GitHub Actions для подключения к гибкому серверу База данных Azure для PostgreSQL

Начало работы с GitHub Actions с помощью рабочего процесса для развертывания обновлений базы данных в Базе данных Azure для PostgreSQL.

Предпосылки

Тебе нужно:

Общие сведения о файле рабочего процесса

Рабочий процесс в GitHub Actions определяется файлом .yml, который размещается в папке репозитория /.github/workflows/. Это определение содержит разные шаги и параметры рабочего процесса.

Этот файл содержит два раздела:

Секция Tasks
Аутентификация 1. Создание учетных данных для развертывания.
Развертывание 1. Развертывание базы данных.

Создание учетных данных для развертывания.

Чтобы использовать действие Azure Login с OIDC, необходимо настроить учетные данные федеративного удостоверения для приложения Microsoft Entra или управляемого удостоверения, назначаемого пользователем.

Вариант 1. Приложение Microsoft Entra

Вариант 2. Управляемое удостоверение, назначаемое пользователем

Скопируйте строку подключения базы данных PostgreSQL для Azure

На портале Azure перейдите к гибкому серверу База данных Azure для PostgreSQL. В меню ресурсов в разделе "Параметры" выберите "Подключиться". На этой странице используйте раскрывающийся список Имя базы данных, чтобы выбрать базу данных, к которой нужно подключиться. Разверните раздел «Подключение из приложения» и скопируйте ADO.NET строку подключения. Замените значение-заполнитель {your_password} вашим фактическим паролем. Строка подключения выглядит примерно так.

Server={servername.postgres.database.azure.com};Database={your_database};Port=5432;User Id={adminusername};Password={your_password};Ssl Mode=Require;

Используйте строка подключения в качестве секрета GitHub.

Настройка секретов GitHub

Необходимо указать идентификатор клиента приложения, идентификатор каталога (клиента) и идентификатор подписки для действия входа. Эти значения могут быть указаны непосредственно в рабочем процессе или храниться в секретах GitHub с указанием ссылок на них в рабочем процессе. Сохранение значений в виде секретов GitHub является более безопасным вариантом.

  1. В GitHub перейдите в репозиторий.

  2. Выберите Security > Секреты и переменные > Actions.

    Снимок экрана добавления секрета

  3. Нажмите Создать секрет репозитория.

    Замечание

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

  4. Создайте секреты для AZURE_CLIENT_ID, AZURE_TENANT_ID и AZURE_SUBSCRIPTION_ID. Скопируйте эти значения из приложения Microsoft Entra или назначенного пользователем управляемого удостоверения для секретов GitHub.

    Секрет GitHub Приложение Microsoft Entra или назначенное пользователем управляемое удостоверение
    AZURE_CLIENT_ID Идентификатор клиента
    AZURE_SUBSCRIPTION_ID ID подписки
    AZURE_TENANT_ID (идентификатор арендатора Azure) Идентификатор каталога (арендатора)

    Замечание

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

Добавьте рабочий процесс

  1. Перейдите в раздел Actions (Действия) для репозитория GitHub.

  2. Выберите Set up your workflow yourself (Настроить рабочий процесс самостоятельно).

  3. Удалите все содержимое в файле рабочего процесса после раздела on:. Например, оставшийся рабочий процесс может выглядеть следующим образом.

    name: CI
    
    on:
    push:
        branches: [ main ]
    pull_request:
        branches: [ main ]
    
  4. Переименуйте рабочий процесс PostgreSQL for GitHub Actions и добавьте действия для выхода и входа. Эти действия извлекают код вашего сайта и выполняют аутентификацию в Azure с помощью созданных ранее секретов GitHub.

    name: PostgreSQL for GitHub Actions
    
    on:
    push:
        branches: [ main ]
    pull_request:
        branches: [ main ]
    
    jobs:
    build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v1
        - uses: azure/login@v2
        with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  5. Используйте действие Azure PostgreSQL Deploy для подключения к гибкому серверу База данных Azure для PostgreSQL. Замените POSTGRESQL_SERVER_NAME именем сервера. У вас должен быть файл данных Базы данных Azure для PostgreSQL с именем data.sql на корневом уровне репозитория.

     - uses: azure/postgresql@v1
       with:
        connection-string: ${{ secrets.AZURE_POSTGRESQL_CONNECTION_STRING }}
        server-name: POSTGRESQL_SERVER_NAME
        plsql-file: './data.sql'
    
  6. Завершите создание рабочего процесса, добавив действие для выхода из Azure. Готовый рабочий процесс выглядит так: Файл отображается в папке .github/workflows репозитория.

    name: PostgreSQL for GitHub Actions
    
    on:
    push:
        branches: [ main ]
    pull_request:
        branches: [ main ]
    
    
    jobs:
    build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v1
        - uses: azure/login@v2
        with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
    - uses: azure/postgresql@v1
      with:
        server-name: POSTGRESQL_SERVER_NAME
        connection-string: ${{ secrets.AZURE_POSTGRESQL_CONNECTION_STRING }}
        plsql-file: './data.sql'
    
        # Azure logout
    - name: logout
      run: |
         az logout
    

Проверьте ваше развертывание

  1. Перейдите в раздел Actions (Действия) для репозитория GitHub.

  2. Откройте первый результат, чтобы проверить подробные журналы выполнения рабочего процесса.

    Журнал выполнения GitHub Actions.

Очистите ресурсы

Если вам больше не нужна база данных и репозиторий База данных Azure для PostgreSQL, очистите ресурсы, развернутые путем удаления группы ресурсов и репозитория GitHub.