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


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

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

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

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

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

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

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

Рекомендуется пройти проверку подлинности в Службах приложений Azure для GitHub Actions с помощью OpenID Connect. Вы также можете выполнить проверку подлинности с помощью учетной записи службы или профиля публикации.

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

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

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

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

    Примечание.

    По состоянию на октябрь 2020 г. пользователи должны задать параметр приложения для веб-приложений WEBSITE_WEBDEPLOY_USE_SCM Linux, 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 Login для входа в частный реестр контейнеров. В этом примере используется Реестр контейнеров 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 }}     

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

name: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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 с секретами Web Deploy.
slot-name (Необязательно) Введите существующий слот, отличный от рабочего слота.
package (Необязательно) Используется только с веб-приложениями: путь к пакету или папке. \*.zip, \*.war, \*.jar или папка для развертывания.
images (обязательно) Используется только с контейнерами веб-приложений: укажите полное имя образа контейнера. Например, myregistry.azurecr.io/nginx:latest или python:3.12.12-alpine/. Для приложения с несколькими контейнерами можно указать несколько имен образов контейнеров (разделенные несколькими строками).
configuration-file (Необязательно) Используется только с контейнерами веб-приложений: путь к файлу Docker Compose. Это должен быть полный путь или путь относительно рабочего каталога по умолчанию. Требуется для приложений с несколькими контейнерами.
startup-command (Необязательно) Введите команду запуска. Пример: 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 }}'
name: Windows_Container_Workflow

on: [push]

jobs:
  build:
    runs-on: windows-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 }}'

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