Прочитать на английском

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


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

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

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

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

  • Создание образа с помощью Dockerfile
  • Отправьте образ в реестр контейнеров Azure.
  • Разверните образ контейнера в сервисе Azure Container Instances.

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

Важно!

В настоящее время доступна предварительная версия 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. В следующем примере создается служебный принципал с ролью Contributor, область действия которого охватывает группу ресурсов для реестра контейнеров.

Сначала получите идентификатор вашей группы ресурсов. Замените имя вашей группы в следующей команде 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 Имя сервера для входа в реестр (все буквы в нижнем регистре). Пример: myregistry.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

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

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

Остановите экземпляр контейнера с помощью команды 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, чтобы найти дополнительные действия для автоматизации рабочего процесса разработки