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


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

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

Чтобы автоматизировать развертывание одного контейнера в Экземплярах контейнеров используйте действие GitHub Actions Развертывание в Экземплярах контейнеров Azure. Это действие позволяет задать для экземпляра контейнера свойства, аналогичные используемым в команде az container create.

В этой статье показано, как в репозитории GitHub настроить рабочий процесс для выполнения следующих действий:

  • Создание образа с помощью Dockerfile
  • принудительная отправка образов в реестр контейнеров Azure;
  • развертывание образа контейнера в службе "Экземпляры контейнеров Azure".

В этой статье описано два способа настройки рабочего процесса:

Внимание

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

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

  • Учетная запись GitHub. Создайте учетную запись на сайте https://github.com, если у вас ее еще нет.
  • Azure CLI. Для выполнения задач, требующих наличия Azure CLI, можно использовать Azure Cloud Shell или локальный экземпляр Azure CLI. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
  • Реестр контейнеров Azure. Если у вас его нет, создайте реестр контейнеров Azure уровня "Базовый" с помощью Azure CLI, портала Azure или других методов. Запишите используемую для развертывания группу ресурсов, которая задействована в рабочем процессе GitHub.

Настройка репозитория

  • В примерах, приведенных в этой статье, с помощью GitHub создайте вилку следующего репозитория: https://github.com/Azure-Samples/acr-build-helloworld-node.

    Этот репозиторий содержит Dockerfile и исходные файлы для создания образа контейнера для небольшого веб-приложения.

    Снимок экрана с выделенной кнопкой

  • Убедитесь, что для вашего репозитория включена функция Actions. Перейдите к созданной вами вилке репозитория и выберите элементы Settings (Параметры)>Actions (Действия). В списке Разрешения действий выберите вариант Разрешить все действия.

Настройка рабочего процесса GitHub

Создание учетных данных для проверки подлинности Azure

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

Сначала получите идентификатор группы ресурсов. Укажите нужное имя реестра в следующей команде az group show:

groupId=$(az group show \
  --name <resource-group-name> \
  --query id --output tsv)

Создайте субъект-службу с помощью команды az ad sp create-for-rbac:

az ad sp create-for-rbac \
  --scope $groupId \
  --role Contributor \
  --sdk-auth

Она выводит выходные данные следующего вида:

{
  "clientId": "xxxx6ddc-xxxx-xxxx-xxx-ef78a99dxxxx",
  "clientSecret": "xxxx79dc-xxxx-xxxx-xxxx-aaaaaec5xxxx",
  "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

Сохраните выходные данные JSON, так как оно используется на следующем шаге. Кроме того, запишите значение clientId. Оно понадобится для обновления субъекта-службы при работе со следующим разделом.

Обновление для проверки подлинности реестра

Обновите учетные данные субъекта-службы Azure, чтобы разрешить доступ к реестру контейнеров для отправки и извлечения образа. Этот шаг позволяет рабочему процессу GitHub использовать субъект-службу для проверки подлинности в реестре контейнеров и отправки и извлечения образа Docker.

Получите идентификатор ресурса реестра контейнеров. Укажите нужное имя реестра в следующей команде az acr show:

registryId=$(az acr show \
  --name <registry-name> \
  --resource-group <resource-group-name> \
  --query id --output tsv)

Назначить роль AcrPush, которая обеспечивает доступ к реестру для отправки и извлечения, можно с помощью команды az role assignment create. Укажите идентификатор клиента своего субъекта-службы:

az role assignment create \
  --assignee <ClientId> \
  --scope $registryId \
  --role AcrPush

Сохранение учетных данных в репозитории GitHub

  1. В пользовательском интерфейсе GitHub перейдите в вилку репозитория и выберите "Секреты безопасности>" и "Действия переменных>".

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

Секретный Значение
AZURE_CREDENTIALS Все выходные данные JSON, полученные на этапе создания субъекта-службы.
REGISTRY_LOGIN_SERVER Имя сервера реестра (все буквы в нижнем регистре). Пример: moy_reestr.azurecr.io.
REGISTRY_USERNAME clientId из выходных данных JSON, полученных на этапе создания субъекта-службы.
REGISTRY_PASSWORD clientSecret из выходных данных JSON, полученных на этапе создания субъекта-службы.
RESOURCE_GROUP Имя группы ресурсов, использованной для определения области для субъекта-службы.

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

  1. В пользовательском интерфейсе GitHub выберите Действия.
  2. Выберите настроить рабочий процесс вручную.
  3. В поле Edit new file (Изменить новый файл) вставьте указанное ниже содержимое YAML, чтобы перезаписать образец кода. Примите имя файла по умолчанию main.yml или укажите имя файла по своему выбору.
  4. Выберите команду Start commit (Начать фиксацию), при необходимости предоставьте короткое и расширенное описания фиксации и нажмите кнопку Commit new file (Зафиксировать новый файл).
on: [push]
name: Linux_Container_Workflow

jobs:
    build-and-deploy:
        runs-on: ubuntu-latest
        steps:
        # checkout the repo
        - name: 'Checkout GitHub Action'
          uses: actions/checkout@main
          
        - name: 'Login via Azure CLI'
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
        
        - name: 'Build and push image'
          uses: azure/docker-login@v1
          with:
            login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            username: ${{ secrets.REGISTRY_USERNAME }}
            password: ${{ secrets.REGISTRY_PASSWORD }}
        - run: |
            docker build . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}

        - name: 'Deploy to Azure Container Instances'
          uses: 'azure/aci-deploy@v1'
          with:
            resource-group: ${{ secrets.RESOURCE_GROUP }}
            dns-name-label: ${{ secrets.RESOURCE_GROUP }}${{ github.run_number }}
            image: ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            registry-login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            registry-username: ${{ secrets.REGISTRY_USERNAME }}
            registry-password: ${{ secrets.REGISTRY_PASSWORD }}
            name: aci-sampleapp
            location: 'west us'

Проверка рабочего процесса

После фиксации файла рабочего процесса запускается рабочий процесс. Чтобы просмотреть сведения о ходе выполнения рабочего процесса, перейдите к разделу Actions (Действия)>Workflows (Рабочие процессы).

Просмотр сведений о ходе выполнения рабочего процесса

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

Когда рабочий процесс успешно завершится, получите сведения об экземпляре контейнера с именем aci-sampleapp, выполнив команду az container show. Укажите имя своей группы ресурсов:

az container show \
  --resource-group <resource-group-name> \
  --name aci-sampleapp \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

Она выводит выходные данные следующего вида:

FQDN                                   ProvisioningState
---------------------------------      -------------------
aci-action01.westus.azurecontainer.io  Succeeded

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

Запуск веб-приложения в браузере

Использование расширения развертывания в Azure

Кроме того, для настройки рабочего процесса можно использовать расширение развертывания в Azure в Azure CLI. Команда az container app up в расширении принимает входные параметры, чтобы настроить рабочий процесс для развертывания в службе "Экземпляры контейнеров Azure".

Рабочий процесс, созданный Azure CLI, аналогичен рабочему процессу, который можно создать вручную с помощью GitHub.

Дополнительные требования

Кроме выполнения предварительных требований и настройки репозитория, для этого сценария необходимо установить расширение развертывания в Azure для Azure CLI.

Установите расширение с помощью команды az extension add.

az extension add \
  --name deploy-to-azure

Сведения о поиске и установке расширений, а также управлении ими приведены в статье Использование расширений с Azure CLI.

Выполнить az container app up

Чтобы выполнить команду az container app up, укажите по меньшей мере:

  • имя вашего реестра контейнеров Azure, например myregistry;
  • URL-адрес репозитория GitHub, например https://github.com/<your-GitHub-Id>/acr-build-helloworld-node.

Пример команды:

az container app up \
  --acr myregistry \
  --repository https://github.com/myID/acr-build-helloworld-node

Ход выполнения команды

  • При появлении запроса укажите учетные данные GitHub или предоставьте личный маркер доступа GitHub, который содержит области репозитория (repo) и пользователей (user) для проверки подлинности в учетной записи GitHub. Если вы предоставите учетные данные GitHub. команда создаст для вас личный маркер доступа. Следуйте дальнейшим подсказкам, чтобы настроить рабочий процесс.

  • Команда создает секреты репозитория для рабочего процесса:

    • учетные данные субъекта-службы для Azure CLI;
    • учетные данные для доступа к реестру контейнеров Azure.
  • Когда команда зафиксирует файл рабочего процесса в репозитории, рабочий процесс активируется.

Она выводит выходные данные следующего вида:

[...]
Checking in file github/workflows/main.yml in the GitHub repository myid/acr-build-helloworld-node
Creating workflow...
GitHub Action Workflow has been created - https://github.com/myid/acr-build-helloworld-node/runs/515192398
GitHub workflow completed.
Workflow succeeded
Your app is deployed at:  http://acr-build-helloworld-node.eastus.azurecontainer.io:8080/

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

Проверка рабочего процесса

Рабочий процесс позволяет развернуть экземпляр контейнера Azure с базовым именем репозитория GitHub, в нашем случае acr-build-helloworld-node. Когда рабочий процесс успешно завершится, получите сведения об экземпляре контейнера с именем acr-build-helloworld-node, выполнив команду az container show. Укажите имя своей группы ресурсов:

az container show \
  --resource-group <resource-group-name> \
  --name acr-build-helloworld-node \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

Она выводит выходные данные следующего вида:

FQDN                                                   ProvisioningState
---------------------------------                      -------------------
acr-build-helloworld-node.westus.azurecontainer.io     Succeeded

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

Очистка ресурсов

Остановите экземпляр контейнера с помощью команды az container delete:

az container delete \
  --name <instance-name>
  --resource-group <resource-group-name>

Чтобы удалить группу ресурсов и ее содержимое, выполните команду az group delete.

az group delete \
  --name <resource-group-name>

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

Посетите GitHub Marketplace, чтобы найти дополнительные действия для автоматизации рабочего процесса разработки