Развертывание настраиваемого контейнера в Службе приложений с помощью GitHub Actions

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

Рабочий процесс определяется файлом YAML (.yml) по пути /.github/workflows/ в вашем репозитории. Это определение содержит разные шаги и параметры рабочего процесса.

Для рабочего процесса контейнера Службы приложений Azure файл содержит три раздела:

Раздел Задачи
Аутентификация 1. Получение субъекта-службы или профиля публикации.
2. Создание секрета GitHub.
Сборка 1. Создание среды.
2. Создание образа контейнера.
Развертывание 1. Развертывание образа контейнера.

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

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

Для проверки подлинности в Службе приложений Azure при работе с GitHub Actions мы рекомендуем использовать профиль публикации. Можно также пройти проверку подлинности с помощью субъекта-службы или Open ID Connect, но этот процесс требует дополнительных действий.

Сохраните учетные данные профиля публикации или субъект-службу в качестве секрета GitHub для проверки подлинности в Azure. Вы будете обращаться к этому секрету в рабочем процессе.

Профиль публикации — это учетные данные уровня приложения. Настройте профиль публикации в качестве секрета GitHub.

  1. Перейдите к службе приложений на портале Azure.

  2. На странице Обзор выберите Получить профиль публикации.

    Примечание.

    По состоянию на октябрь 2020 г. для веб-приложений Linux нужно присваивать параметру приложения WEBSITE_WEBDEPLOY_USE_SCM значение true перед скачиванием файла. В дальнейшем это требование будет отменено. Подробнее о настройке общих параметров веб-приложения см. в разделе Настройка приложения “Служба приложений” на портале Azure.

  3. Сохраните скачанный файл. Содержимое этого файла будет использоваться для создания секрета GitHub.

Настройка секрета GitHub для проверки подлинности

В GitHub найдите нужный репозиторий. Выберите "Параметры секретов > безопасности > " и переменных > "Действия > нового репозитория".

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

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

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

Настройка секретов GitHub для реестра

Определите секреты, которые будут использоваться действием входа в Docker. В приведенном здесь примере в качестве реестра контейнеров используется Реестр контейнеров Azure.

  1. Перейдите к контейнеру на портале Azure или Docker и скопируйте имя пользователя и пароль. Имя пользователя и пароль Реестра контейнеров Azure можно найти на портале Azure в разделе Параметры > Ключи доступа для вашего реестра.

  2. Задайте новый секрет для имени пользователя REGISTRY_USERNAME реестра.

  3. Задайте новый секрет для пароля REGISTRY_PASSWORD реестра.

Создание образа контейнера

В следующем примере показана часть рабочего процесса, который создает образ Docker для Node.JS. Используйте имя для входа Docker, чтобы войти в закрытый реестр контейнеров. В этом примере используется Реестр контейнеров Azure, но то же действие работает для других реестров.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

Вы также можете использовать вход Docker для входа в несколько реестров контейнеров одновременно. Этот пример включает два новых секрета GitHub для проверки подлинности с помощью docker.io. В этом примере предполагается, что файл Dockerfile находится на корневом уровне реестра.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - uses: azure/docker-login@v1
      with:
        login-server: index.docker.io
        username: ${{ secrets.DOCKERIO_USERNAME }}
        password: ${{ secrets.DOCKERIO_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

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

Чтобы развернуть образ в настраиваемом контейнере Службы приложений, используйте действие azure/webapps-deploy@v2. У этого действия семь параметров:

Параметр Описание
app-name (Обязательный) Имя приложения Службы приложений.
publish-profile (Необязательный) Применяется к веб-приложениям (Windows и Linux) и контейнерам веб-приложений (Linux). Сценарий с несколькими контейнерами не поддерживается. Файл профиля публикации (*.publishsettings) содержит секреты для веб-развертывания.
slot-name (Необязательный) Введите существующий слот вместо рабочего.
package (Необязательный) Применяется только к веб-приложению: путь к пакету или папке. Файлы ZIP, WAR, JAR или папка для развертывания.
images (Обязательный) Применяется только к контейнерам веб-приложений: Укажите полное имя образа контейнера. Например, myregistry.azurecr.io/nginx:latest или python:3.7.2-alpine/. Для многоконтейнерного приложения можно указать несколько имен образов контейнеров (в несколько строк).
configuration-file (Необязательный) Применяется только к контейнерам веб-приложений: путь к файлу Docker-Compose. Это должен быть полный путь или путь относительно рабочего каталога по умолчанию. Требуется для приложений с несколькими контейнерами.
startup-command (Необязательный) Введите команду запуска. Для ex. dotnet run или dotnet filename.dll
name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}

    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

    - uses: azure/webapps-deploy@v2
      with:
        app-name: 'myapp'
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'

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

Вы можете найти наш набор компонентов Actions, объединенных в разных репозитории, а также соответствующую документацию и примеры использования GitHub для CI/CD и развертыванию приложений в Azure на GitHub.