Поделиться через


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

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

Предпосылки

Тебе нужно:

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

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

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

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

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

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

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

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

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

В портал Azure перейдите к База данных Azure для PostgreSQL гибкому экземпляру сервера и в меню ресурсов в разделе "Параметры" выберите "Подключить". На этой странице используйте поле со списком "Имя базы данных", чтобы выбрать имя базы данных, к которой требуется подключиться. Разверните узел Connect из раздела приложения и скопируйте 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. Выберите > переменных>".

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

  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 для подключения к База данных 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.