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


Использование рабочего процесса GitHub Actions для развертывания статического веб-сайта в службе хранилища Azure

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

Примечание.

Если вы используете Статические веб-приложения Azure, то вам не нужно вручную настраивать рабочий процесс GitHub Actions. Статические веб-приложения Azure автоматически создают рабочий процесс GitHub Actions.

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

Подписка Azure и учетная запись GitHub.

Примечание.

Обычно сеть доставки содержимого (CDN) используется для уменьшения задержки в работе пользователей по всему миру и уменьшения количества транзакций в учетной записи хранения. Развертывание статического содержимого в облачной службе хранилища может снизить потребность в потенциально дорогостоящем вычислительном экземпляре. Дополнительные сведения см. в разделе Шаблон размещения статического содержимого.

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

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

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

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

Настройка секретов 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 Client ID
    AZURE_SUBSCRIPTION_ID ИД подписки
    AZURE_TENANT_ID Идентификатор каталога (клиента)

    Примечание.

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

Добавление рабочего процесса

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

    Пункт меню GitHub Actions

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

  3. Удалите все содержимое в файле рабочего процесса после раздела on:. После этого рабочий процесс должен выглядеть примерно так.

    name: CI with OpenID Connect
    
    on:
        push:
            branches: [ main ]
    
  4. Добавление раздела для разрешений.

    name: CI with OpenID Connect
    
    on:
        push:
            branches: [ main ]
    
    permissions:
          id-token: write
          contents: read
    
  5. Добавление действий для извлечения и входа. Эти действия извлекают код сайта из репозитория и выполняют проверку подлинности в Azure с помощью ранее созданных секретов GitHub.

    name: CI with OpenID Connect
    
    on:
        push:
            branches: [ main ]
    
    permissions:
          id-token: write
          contents: read
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v2
          with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  6. Используйте действие Azure CLI, чтобы передать код в хранилище BLOB-объектов и очистить конечную точку CDN. В az storage blob upload-batch замените заполнитель именем своей учетной записи хранения. Сценарий выполнит передачу в контейнер $web. В az cdn endpoint purge замените заполнители именем профиля CDN, именем конечной точки CDN и именем группы ресурсов. Чтобы ускорить очистку CDN, можно добавить параметр --no-wait в az cdn endpoint purge. Для повышения безопасности вы также можете добавить опцию --account-key с ключом учетной записи хранилища.

        - name: Upload to blob storage
          uses: azure/CLI@v1
          with:
            inlineScript: |
                az storage blob upload-batch --account-name <STORAGE_ACCOUNT_NAME>  --auth-mode key -d '$web' -s .
        - name: Purge CDN endpoint
          uses: azure/CLI@v1
          with:
            inlineScript: |
               az cdn endpoint purge --content-paths  "/*" --profile-name "CDN_PROFILE_NAME" --name "CDN_ENDPOINT" --resource-group "RESOURCE_GROUP"
    
  7. Завершите создание рабочего процесса, добавив действие для выхода из Azure. Готовый рабочий процесс выглядит так. В папке .github/workflows репозитория появится новый файл.

    name: CI with OpenID Connect
    
    on:
        push:
            branches: [ main ]
    
    permissions:
          id-token: write
          contents: read
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v2
          with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
        - name: Upload to blob storage
          uses: azure/CLI@v1
          with:
            inlineScript: |
                az storage blob upload-batch --account-name <STORAGE_ACCOUNT_NAME> --auth-mode key -d '$web' -s .
        - name: Purge CDN endpoint
          uses: azure/CLI@v1
          with:
            inlineScript: |
               az cdn endpoint purge --content-paths  "/*" --profile-name "CDN_PROFILE_NAME" --name "CDN_ENDPOINT" --resource-group "RESOURCE_GROUP"
    
      # Azure logout
        - name: logout
          run: |
                az logout
          if: always()
    

Проверка развертывания

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

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

    Журнал выполнения действий GitHub

Очистка ресурсов

Когда статический веб-сайт и репозиторий GitHub перестанут быть нужны, очистите ненужные развернутые ресурсы, удалив группу ресурсов и репозиторий GitHub.

Следующие шаги