Skip to main content

Развертывание Docker в Службе приложений Azure

Контейнер Docker можно развернуть для Службы приложений Azure в рамках рабочих процессов непрерывного развертывания (CD).

Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.

Введение

Это руководство объясняет, как использовать GitHub Actions для создания и развертывания контейнера Docker в Службе приложений Azure.

Примечание. Если рабочим процессам GitHub Actions требуется доступ к ресурсам от поставщика облачных служб, поддерживающего OpenID Connect (OIDC), можно настроить рабочие процессы для проверки подлинности непосредственно в поставщике облачных служб. Это позволит прекратить хранение таких учетных данных в виде долгоживущих секретов и обеспечить другие преимущества безопасности. Дополнительную информацию см. в разделе Сведения об усилении защиты с помощью OpenID Connect. и Настройка OpenID Connect в Azure.

Предварительные требования

Перед созданием рабочего процесса GitHub Actions сначала нужно выполнить следующие действия по настройке:

  1. Создать план Службы приложений Azure.

    Например, можно использовать Azure CLI для создания нового плана Службы приложений:

    Shell
    az appservice plan create \
       --resource-group MY_RESOURCE_GROUP \
       --name MY_APP_SERVICE_PLAN \
       --is-linux

    В приведенной выше команде замените MY_RESOURCE_GROUP на существующую группу ресурсов Azure, а MY_APP_SERVICE_PLAN — на новое имя плана Службы приложений.

    Дополнительные сведения об использовании Azure CLI см. в документации по Azure:

    • Сведения о проверке подлинности см. в разделе Вход с помощью Azure CLI.
    • Сведения о создании группы ресурсов см. в разделе, посвященном команде az group.
  2. Создание веб-приложения.

    Например, можно использовать Azure CLI для создания веб-приложения Службы приложений Azure:

    Shell
    az webapp create \
        --name MY_WEBAPP_NAME \
        --plan MY_APP_SERVICE_PLAN \
        --resource-group MY_RESOURCE_GROUP \
        --deployment-container-image-name nginx:latest

    В приведенной выше команде замените параметры собственными значениями, где MY_WEBAPP_NAME — это новое имя для веб-приложения.

  3. Настройте профиль публикации Azure и создайте секрет AZURE_WEBAPP_PUBLISH_PROFILE.

    Создайте учетные данные развертывания Azure с помощью профиля публикации. Дополнительные сведения см. в разделе Создание учетных данных развертывания в документации по Azure.

    В репозитории GitHub создайте секрет AZURE_WEBAPP_PUBLISH_PROFILE, содержащий сведения из профиля публикации. Дополнительные сведения о создании секретов см. в разделе Зашифрованные секреты.

  4. Задайте учетные данные реестра для веб-приложения.

    Создайте personal access token с областями repo и read:packages . Дополнительные сведения см. в разделе Создание personal access token.

    Задайте значение DOCKER_REGISTRY_SERVER_URL https://ghcr.io, DOCKER_REGISTRY_SERVER_USERNAME чтобы указать имя пользователя GitHub или организацию, которая владеет репозиторием, и DOCKER_REGISTRY_SERVER_PASSWORD для personal access token выше. Это даст учетные данные веб-приложения, чтобы он смог извлечь образ контейнера после того, как рабочий процесс отправляет созданный образ в реестр. Это можно сделать с помощью следующей команды Azure CLI:

    az webapp config appsettings set \
         --name MY_WEBAPP_NAME \
         --resource-group MY_RESOURCE_GROUP \
         --settings DOCKER_REGISTRY_SERVER_URL=https://ghcr.io DOCKER_REGISTRY_SERVER_USERNAME=MY_REPOSITORY_OWNER DOCKER_REGISTRY_SERVER_PASSWORD=MY_PERSONAL_ACCESS_TOKEN
  5. При необходимости настройте среду развертывания. Среды используются для описания общего целевого объекта развертывания, такого как production, staging или development. Когда рабочий процесс GitHub Actions выполняет развертывание в среде, эта среда отображается на главной странице репозитория. Среды можно использовать для утверждения продолжения задания, ограничения ветвей, которые могут активировать рабочий процесс, или ограничения доступа к секретам. Дополнительные сведения о создании сред см. в разделе Использование сред для развертывания.

Создание рабочего процесса

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

В следующем примере рабочего процесса показано, как создать и развернуть контейнер Docker в Службе приложений Azure при отправке в ветвь main.

Убедитесь, что в ключе env рабочего процесса в качестве имени созданного веб-приложения задано значение AZURE_WEBAPP_NAME.

Если вы настроили среду развертывания, измените значение environment на имя среды. Если вы не настроили среду , удалите ключ environment.

YAML
# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>Они предоставляются сторонним поставщиком, и на них распространяются
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>отдельные условия обслуживания, политика конфиденциальности и поддержка
# <a name="documentation"></a>документации.

# <a name="github-recommends-pinning-actions-to-a-commit-sha"></a>GitHub рекомендует закрепить действия в фиксации SHA.
# <a name="to-get-a-newer-version-you-will-need-to-update-the-sha"></a>Чтобы получить более новую версию, потребуется обновить SHA.
# <a name="you-can-also-reference-a-tag-or-branch-but-the-action-may-change-without-warning"></a>Вы также можете ссылаться на тег или ветвь, однако действие может измениться без предупреждения.

name: Build and deploy a container to an Azure Web App

env:
  AZURE_WEBAPP_NAME: MY_WEBAPP_NAME   # set this to your application's name

on:
  push:
    branches:
      - main

permissions:
  contents: 'read'
  packages: 'write'

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Log in to GitHub container registry
        uses: docker/login-action@v1.10.0
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Lowercase the repo name
        run: echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}

      - name: Build and push container image to registry
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: ghcr.io/${{ env.REPO }}:${{ github.sha }}
          file: ./Dockerfile

  deploy:
    runs-on: ubuntu-latest

    needs: build

    environment:
      name: 'production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Lowercase the repo name
        run: echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}

      - name: Deploy to Azure Web App
        id: deploy-to-webapp
        uses: azure/webapps-deploy@0b651ed7546ecfc75024011f76944cb9b381ef1e
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
          images: 'ghcr.io/${{ env.REPO }}:${{ github.sha }}'

Дополнительные ресурсы

Следующие ресурсы также содержат полезные сведения на эти темы:

  • Исходный начальный рабочий процесс см. в azure-container-webapp.yml из репозитория starter-workflows GitHub Actions.
  • Действие, используемое для развертывания веб-приложения, является официальным действием Azure/webapps-deploy Azure.
  • Дополнительные примеры рабочих процессов GitHub Actions, которые развертываются в Azure, см. в репозитории actions-workflow-samples.