Развертывание настраиваемого контейнера в Службе приложений с помощью GitHub Actions
GitHub Actions предоставляет гибкие возможности для создания автоматизированных рабочих процессов разработки программного обеспечения. Действие веб-развертывания Azure позволяет автоматизировать рабочий процесс, чтобы развернуть настраиваемые контейнеры в Службе приложений с помощью GitHub Actions.
Рабочий процесс определяется файлом YAML (.yml) по пути /.github/workflows/
в вашем репозитории. Это определение содержит разные шаги и параметры рабочего процесса.
Для рабочего процесса контейнера Службы приложений Azure файл содержит три раздела:
Раздел | Задачи |
---|---|
Аутентификация | 1. Получение субъекта-службы или профиля публикации. 2. Создание секрета GitHub. |
Сборка | 1. Создание среды. 2. Создание образа контейнера. |
Развертывание | 1. Развертывание образа контейнера. |
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создание бесплатной учетной записи
- Учетная запись GitHub. Если у вас ее нет, зарегистрируйтесь бесплатно. Для развертывания в Службе приложений Azure необходимо иметь код в репозитории GitHub.
- Рабочий реестр контейнеров и приложение “Служба приложений Azure” для контейнеров. В этом примере используется Реестр контейнеров Azure. Обязательно выполните полное развертывание в Службе приложений Azure для контейнеров. В отличие от обычных веб-приложений, веб-приложения для контейнеров не имеют целевой страницы по умолчанию. Опубликуйте контейнер, чтобы получить рабочий пример.
Создание учетных данных для развертывания.
Для проверки подлинности в Службе приложений Azure при работе с GitHub Actions мы рекомендуем использовать профиль публикации. Можно также пройти проверку подлинности с помощью субъекта-службы или Open ID Connect, но этот процесс требует дополнительных действий.
Сохраните учетные данные профиля публикации или субъект-службу в качестве секрета GitHub для проверки подлинности в Azure. Вы будете обращаться к этому секрету в рабочем процессе.
Профиль публикации — это учетные данные уровня приложения. Настройте профиль публикации в качестве секрета GitHub.
Перейдите к службе приложений на портале Azure.
На странице Обзор выберите Получить профиль публикации.
Примечание.
По состоянию на октябрь 2020 г. для веб-приложений Linux нужно присваивать параметру приложения
WEBSITE_WEBDEPLOY_USE_SCM
значениеtrue
перед скачиванием файла. В дальнейшем это требование будет отменено. Подробнее о настройке общих параметров веб-приложения см. в разделе Настройка приложения “Служба приложений” на портале Azure.Сохраните скачанный файл. Содержимое этого файла будет использоваться для создания секрета 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.
Перейдите к контейнеру на портале Azure или Docker и скопируйте имя пользователя и пароль. Имя пользователя и пароль Реестра контейнеров Azure можно найти на портале Azure в разделе Параметры > Ключи доступа для вашего реестра.
Задайте новый секрет для имени пользователя
REGISTRY_USERNAME
реестра.Задайте новый секрет для пароля
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.