Note
GitHubразмещенные в данный момент средства выполнения не поддерживаются в GitHub Enterprise Server. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.
Введение
Это руководство объясняет, как использовать GitHub Actions для создания и развертывания контейнера Docker в Службе приложений Azure.
Note
Если рабочим процессам GitHub Actions требуется доступ к ресурсам от поставщика облачных служб, поддерживающего OpenID Connect (OIDC), можно настроить рабочие процессы для проверки подлинности непосредственно в поставщике облачных служб. Это позволит прекратить хранение таких учетных данных в виде долгоживущих секретов и обеспечить другие преимущества безопасности. Дополнительные сведения см. в разделе Сведения об усилении защиты с помощью OpenID Connect. и Настройка OpenID Connect в Azure.
Необходимые компоненты
Перед созданием рабочего процесса GitHub Actions сначала нужно выполнить следующие действия по настройке:
- 
Создать план Службы приложений Azure.
Например, можно использовать Azure CLI для создания нового плана Службы приложений:
Bash az appservice plan create \ --resource-group MY_RESOURCE_GROUP \ --name MY_APP_SERVICE_PLAN \ --is-linux
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.
 
 - 
Создайте веб-приложение.
Например, можно использовать 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:latestaz 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— это новое имя для веб-приложения. - 
Настройте профиль публикации Azure и создайте секрет
AZURE_WEBAPP_PUBLISH_PROFILE.Создайте учетные данные развертывания Azure с помощью профиля публикации. Дополнительные сведения см. в статье "Создание учетных данных развертывания" в документации По Azure.
В репозитории GitHub создайте секрет
AZURE_WEBAPP_PUBLISH_PROFILE, содержащий сведения из профиля публикации. Дополнительные сведения о создании секретов см. в разделе Использование секретов в GitHub Actions. - 
Задайте учетные данные реестра для веб-приложения.
Создайте personal access token (classic) с
repoобластями иread:packagesобластями. Дополнительные сведения см. в разделе Управление личными маркерами доступа.DOCKER_REGISTRY_SERVER_USERNAMEhttps://ghcr.ioЗадайте дляDOCKER_REGISTRY_SERVER_URLGitHub имя пользователя или организации, которая владеет репозиторием, иDOCKER_REGISTRY_SERVER_PASSWORDpersonal 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 - 
При необходимости настройте среду развертывания. Среды используются для описания общего целевого объекта развертывания, такого как
production,stagingилиdevelopment. Когда рабочий процесс GitHub Actions выполняет развертывание в среде, эта среда отображается на главной странице репозитория. Вы можете использовать среды, чтобы требовать утверждения для продолжения задания, ограничить, какие ветви могут активировать рабочий процесс, воротные развертывания с помощью настраиваемых правил защиты развертывания или ограничить доступ к секретам. Дополнительные сведения о создании сред см. в разделе Управление средами для развертывания. 
Создание рабочего процесса
Выполнив предварительные требования, можно приступить к созданию рабочего процесса.
В следующем примере рабочего процесса показано, как создать и развернуть контейнер Docker в Службе приложений Azure при отправке в ветвь main.
Убедитесь, что в ключе env рабочего процесса в качестве имени созданного веб-приложения задано значение AZURE_WEBAPP_NAME.
Если вы настроили среду развертывания, измените значение environment на имя среды. Если вы не настроили среду , удалите ключ environment.
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
# GitHub рекомендует закрепить действия в фиксации SHA.
# Чтобы получить более новую версию, потребуется обновить SHA.
# Вы также можете ссылаться на тег или ветвь, однако действие может измениться без предупреждения.
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@v4
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b
      - name: Log in to GitHub container registry
        uses: docker/login-action@8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d
        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@9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f
        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@85270a1854658d167ab239bce43949edb336fa7c
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
          images: 'ghcr.io/${{ env.REPO }}:${{ github.sha }}'
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
# GitHub рекомендует закрепить действия в фиксации SHA.
# Чтобы получить более новую версию, потребуется обновить SHA.
# Вы также можете ссылаться на тег или ветвь, однако действие может измениться без предупреждения.
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@v4
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b
      - name: Log in to GitHub container registry
        uses: docker/login-action@8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d
        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@9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f
        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@85270a1854658d167ab239bce43949edb336fa7c
        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. в репозитории GitHub Actions .starter-workflows - Действие, используемое для развертывания веб-приложения, является официальным действием 
Azure/webapps-deployAzure. - Дополнительные примеры рабочих процессов GitHub Actions, которые развертываются в Azure, см. в репозитории actions-workflow-samples.