Создание и публикация образов Docker в Реестр контейнеров Azure
Azure DevOps Services | Azure DevOps Server 2022
С помощью Azure Pipelines можно настроить рабочий процесс конвейера для создания и публикации образов Docker в Реестр контейнеров Azure. В этой статье раскрываются следующие темы:
- Создание реестра в Реестре контейнеров Azure
- Настройка локального агента на виртуальной машине Azure
- Настройка управляемого удостоверения службы
- Создание подключения службы реестра Docker
- Создание и публикация образа в Реестр контейнеров Azure
Необходимые компоненты
Учетная запись GitHub. зарегистрируйтесь бесплатно, если у вас еще нет.
Проект Azure DevOps.
Роль администратора для подключений к службам в проекте Azure DevOps.
Учетная запись Azure с активной подпиской. Зарегистрируйтесь бесплатно , если у вас еще нет.
Получение кода
Вилку или клонирование примера приложения, которое следует использовать вместе с этим руководством.
https://github.com/MicrosoftDocs/pipelines-javascript-docker
Создание реестра в Реестре контейнеров Azure
Перейдите на портал Azure.
Выберите " Создать ресурс " на панели навигации слева, а затем выберите контейнеры , а затем реестр контейнеров.
Выберите свою подписку, а затем выберите группу ресурсов или создайте новую.
Введите имя реестра для реестра контейнеров. Имя реестра должно быть уникальным в Azure и должно содержать не менее 5 символов.
Выберите предпочитаемое расположение и номер SKU, а затем нажмите кнопку "Проверить и создать".
Просмотрите параметры и нажмите кнопку "Создать " после завершения.
Настройка виртуальной машины локального агента
Чтобы использовать управляемое удостоверение службы с Azure Pipelines для публикации образов Docker в Реестр контейнеров Azure, необходимо настроить собственный локальный агент на виртуальной машине Azure.
создание виртуальной машины;
Перейдите на портал Azure.
Выберите " Создать ресурс " на левой панели навигации и выберите "Виртуальная машина " ->Создать".
Выберите свою подписку и выберите группу ресурсов, используемую для создания реестра контейнеров.
Присвойте виртуальной машине имя и выберите образ.
Введите имя пользователя и пароль, а затем нажмите кнопку "Проверить и создать".
Просмотрите параметры и нажмите кнопку "Создать " после завершения.
По завершении развертывания выберите Перейти к ресурсу.
Создание пула агентов
В проекте Azure DevOps выберите значок шестеренки, чтобы перейти к параметрам проекта.
Выберите пулы агентов и нажмите кнопку "Добавить пул".
Выберите "Создать", а затем в раскрывающемся меню "Тип пула" выберите "Самостоятельное размещение".
Присвойте пулу имя, а затем установите флажок "Предоставить доступ ко всем конвейерам ".
После завершения работы выберите Создать.
Теперь выберите только что созданный пул и выберите новый агент.
Мы будем использовать инструкции в этом окне для настройки агента на созданной ранее виртуальной машине. Нажмите кнопку "Копировать", чтобы скопировать ссылку на скачивание в буфер обмена.
Создание личного маркера доступа
В проекте Azure DevOps выберите "Параметры пользователя" и выберите "Личные маркеры доступа".
Выберите новый маркер, чтобы создать новый личный маркер доступа.
Введите имя для PAT и выберите дату окончания срока действия.
Выберите "Пользовательские " в области и выберите " Показать все области".
Выберите пулы агентов —> чтение и управление и группы развертывания —> чтение и управление ими.
Нажмите кнопку "Создать " после завершения и сохраните PAT в безопасном расположении.
Настройка локального агента
В портал Azure подключитесь к виртуальной машине.
В командной строке PowerShell с повышенными привилегиями выполните следующую команду, чтобы скачать агент.
Invoke-WebRequest -URI <YOUR_AGENT_DOWNLOAD_LINK> -UseBasicParsing -OutFile <FILE_PATH> ##Example: Invoke-WebRequest -URI https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-win-x64-2.213.2.zip -OutFile C:\vsts-agent-win-x64-2.213.2.zip
Выполните следующую команду, чтобы извлечь и создать агент.
mkdir agent ; cd agent Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
Выполните следующую команду, чтобы начать настройку агента.
.\config.cmd
Введите URL-адрес сервера при запросе входных данных. Пример: https://dev.azure.com/fabrikamFiber
Нажмите клавишу ВВОД , когда появится запрос на выбор типа проверки подлинности PAT .
Вставьте личный маркер доступа, созданный ранее, и нажмите клавишу ВВОД.
Введите имя пула агентов и введите имя агента.
Оставьте значение по умолчанию для рабочей папки, а затем введите Y , если вы хотите запустить агент в качестве службы.
Теперь, когда агент готов начать прослушивание заданий, давайте установим Docker на нашей виртуальной машине. Выполните следующую команду, чтобы скачать Docker.
Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
Перейдите к пути загрузки, а затем выполните следующую команду, чтобы установить и запустить Docker.
Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
Теперь вернитесь в папку агента и запустите cmd-файл, чтобы запустить агент на виртуальной машине Azure.
.\run.cmd
Агент должен быть указан в пуле агентов на> портале Azure DevOps.
Настройка управляемого удостоверения
В портал Azure перейдите к созданной ранее виртуальной машине.
Выберите удостоверение на панели навигации слева и включите назначенное системой удостоверение.
Нажмите кнопку "Сохранить ", когда вы закончите, а затем подтвердите свой выбор.
Выберите Назначения ролей Azure и щелкните Добавить назначение роли.
Выберите группу ресурсов в раскрывающемся меню "Область ".
Выберите свою подписку и группу ресурсов, а затем выберите роль AcrPush.
Повторите шаги 5 и 6, чтобы добавить роль AcrPull .
Создание подключения службы реестра Docker
В проекте Azure DevOps выберите значок шестеренки, чтобы перейти к параметрам проекта.
Выберите подключения службы в левой области.
Выберите новое подключение к службе и нажмите кнопку "Реестр Docker" и " Далее".
Выберите Реестр контейнеров Azure и выберите управляемое удостоверение службы в качестве типа проверки подлинности.
Введите имя подписки идентификатора подписки и сервер входа в реестр контейнеров Azure. Вставьте назначаемый системой идентификатор клиента виртуальной машины, созданный на предыдущем шаге в текстовом поле идентификатора клиента.
Введите имя подключения к службе и установите флажок "Предоставить доступ ко всем конвейерам ". Чтобы выбрать этот параметр, потребуется роль администратора подключения службы.
Нажмите кнопку "Сохранить " после завершения.
Создание и публикация в Реестр контейнеров Azure
В проекте Azure DevOps выберите "Конвейеры" и выберите " Создать конвейер".
Выберите службу, в котором размещен исходный код (Azure Repos, GitHub и т. д.).
Выберите репозиторий и выберите конвейер Starter.
Удалите конвейер yaml по умолчанию и используйте следующий фрагмент кода:
trigger: - main variables: dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>' imageRepository: '<IMAGE_NAME>' dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile' tag: '$(Build.BuildId)' stages: - stage: Build displayName: Build and publish stage jobs: - job: Build displayName: Build job pool: name: '<YOUR_AGENT_POOL_NAME>' steps: - task: DockerInstaller@0 inputs: dockerVersion: '17.09.0-ce' - task: Docker@2 displayName: Build and publish image to Azure Container Registry inputs: command: buildAndPush containerRegistry: $(dockerRegistryServiceConnection) repository: $(imageRepository) dockerfile: $(dockerfilePath) tags: | $(tag)
После завершения выполнения конвейера можно проверить образ в Azure. Перейдите к Реестр контейнеров Azure в портал Azure, а затем выберите репозитории.
Очистка ресурсов
Если вы не планируете продолжать использовать это приложение, удалите группу ресурсов, чтобы избежать текущих расходов.
az group delete --name myapp-rg