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


Создание и публикация образов Docker в Реестр контейнеров Azure

Azure DevOps Services | Azure DevOps Server 2022

С помощью Azure Pipelines можно настроить рабочий процесс конвейера для создания и публикации образов Docker в Реестр контейнеров Azure. В этой статье раскрываются следующие темы:

  • Создание реестра в Реестре контейнеров Azure
  • Настройка локального агента на виртуальной машине Azure
  • Настройка управляемого удостоверения службы
  • Создание подключения службы реестра Docker
  • Создание и публикация образа в Реестр контейнеров Azure

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

Получение кода

Вилку или клонирование примера приложения, которое следует использовать вместе с этим руководством.

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Создание реестра в Реестре контейнеров Azure

  1. Перейдите на портал Azure.

  2. Выберите " Создать ресурс " на панели навигации слева, а затем выберите контейнеры , а затем реестр контейнеров.

  3. Выберите свою подписку, а затем выберите группу ресурсов или создайте новую.

  4. Введите имя реестра для реестра контейнеров. Имя реестра должно быть уникальным в Azure и должно содержать не менее 5 символов.

  5. Выберите предпочитаемое расположение и номер SKU, а затем нажмите кнопку "Проверить и создать".

  6. Просмотрите параметры и нажмите кнопку "Создать " после завершения.

Настройка виртуальной машины локального агента

Чтобы использовать управляемое удостоверение службы с Azure Pipelines для публикации образов Docker в Реестр контейнеров Azure, необходимо настроить собственный локальный агент на виртуальной машине Azure.

создание виртуальной машины;

  1. Перейдите на портал Azure.

  2. Выберите " Создать ресурс " на левой панели навигации и выберите "Виртуальная машина " ->Создать".

  3. Выберите свою подписку и выберите группу ресурсов, используемую для создания реестра контейнеров.

  4. Присвойте виртуальной машине имя и выберите образ.

  5. Введите имя пользователя и пароль, а затем нажмите кнопку "Проверить и создать".

  6. Просмотрите параметры и нажмите кнопку "Создать " после завершения.

  7. По завершении развертывания выберите Перейти к ресурсу.

Создание пула агентов

  1. В проекте Azure DevOps выберите значок Значок шестеренки шестеренки, чтобы перейти к параметрам проекта.

  2. Выберите пулы агентов и нажмите кнопку "Добавить пул".

  3. Выберите "Создать", а затем в раскрывающемся меню "Тип пула" выберите "Самостоятельное размещение".

  4. Присвойте пулу имя, а затем установите флажок "Предоставить доступ ко всем конвейерам ".

  5. После завершения работы выберите Создать.

  6. Теперь выберите только что созданный пул и выберите новый агент.

  7. Мы будем использовать инструкции в этом окне для настройки агента на созданной ранее виртуальной машине. Нажмите кнопку "Копировать", чтобы скопировать ссылку на скачивание в буфер обмена.

    Снимок экрана: настройка агента.

Создание личного маркера доступа

  1. В проекте Azure DevOps выберите "Параметры пользователя" и выберите "Личные маркеры доступа".

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

  3. Введите имя для PAT и выберите дату окончания срока действия.

  4. Выберите "Пользовательские " в области и выберите " Показать все области".

  5. Выберите пулы агентов> чтение и управление и группы развертывания —> чтение и управление ими.

  6. Нажмите кнопку "Создать " после завершения и сохраните PAT в безопасном расположении.

Настройка локального агента

  1. В портал Azure подключитесь к виртуальной машине.

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

    mkdir agent ; cd agent
    Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
    
  4. Выполните следующую команду, чтобы начать настройку агента.

    .\config.cmd
    
  5. Введите URL-адрес сервера при запросе входных данных. Пример: https://dev.azure.com/fabrikamFiber

  6. Нажмите клавишу ВВОД , когда появится запрос на выбор типа проверки подлинности PAT .

  7. Вставьте личный маркер доступа, созданный ранее, и нажмите клавишу ВВОД.

  8. Введите имя пула агентов и введите имя агента.

  9. Оставьте значение по умолчанию для рабочей папки, а затем введите Y , если вы хотите запустить агент в качестве службы.

    Снимок экрана: настройка агента на виртуальной машине Azure.

  10. Теперь, когда агент готов начать прослушивание заданий, давайте установим Docker на нашей виртуальной машине. Выполните следующую команду, чтобы скачать Docker.

    Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
    
  11. Перейдите к пути загрузки, а затем выполните следующую команду, чтобы установить и запустить Docker.

    Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
    
  12. Теперь вернитесь в папку агента и запустите cmd-файл, чтобы запустить агент на виртуальной машине Azure.

    .\run.cmd
    
  13. Агент должен быть указан в пуле агентов на> портале Azure DevOps.

    Снимок экрана: агент, доступный на вкладке

Настройка управляемого удостоверения

  1. В портал Azure перейдите к созданной ранее виртуальной машине.

  2. Выберите удостоверение на панели навигации слева и включите назначенное системой удостоверение.

  3. Нажмите кнопку "Сохранить ", когда вы закончите, а затем подтвердите свой выбор.

    Снимок экрана: включение удостоверения, назначаемого системой.

  4. Выберите Назначения ролей Azure и щелкните Добавить назначение роли.

  5. Выберите группу ресурсов в раскрывающемся меню "Область ".

  6. Выберите свою подписку и группу ресурсов, а затем выберите роль AcrPush.

  7. Повторите шаги 5 и 6, чтобы добавить роль AcrPull .

    Снимок экрана, на котором показано, как настроить acrpull и push-роли.

Создание подключения службы реестра Docker

  1. В проекте Azure DevOps выберите значок Значок шестеренки шестеренки, чтобы перейти к параметрам проекта.

  2. Выберите подключения службы в левой области.

  3. Выберите новое подключение к службе и нажмите кнопку "Реестр Docker" и " Далее".

  4. Выберите Реестр контейнеров Azure и выберите управляемое удостоверение службы в качестве типа проверки подлинности.

  5. Введите имя подписки идентификатора подписки и сервер входа в реестр контейнеров Azure. Вставьте назначаемый системой идентификатор клиента виртуальной машины, созданный на предыдущем шаге в текстовом поле идентификатора клиента.

  6. Введите имя подключения к службе и установите флажок "Предоставить доступ ко всем конвейерам ". Чтобы выбрать этот параметр, потребуется роль администратора подключения службы.

  7. Нажмите кнопку "Сохранить " после завершения.

    Снимок экрана, на котором показано, как настроить MSI подключения службы реестра Docker.

Создание и публикация в Реестр контейнеров Azure

  1. В проекте Azure DevOps выберите "Конвейеры" и выберите " Создать конвейер".

  2. Выберите службу, в котором размещен исходный код (Azure Repos, GitHub и т. д.).

  3. Выберите репозиторий и выберите конвейер Starter.

  4. Удалите конвейер 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)
    
  5. После завершения выполнения конвейера можно проверить образ в Azure. Перейдите к Реестр контейнеров Azure в портал Azure, а затем выберите репозитории.

    Снимок экрана: изображение в портал Azure.

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

Если вы не планируете продолжать использовать это приложение, удалите группу ресурсов, чтобы избежать текущих расходов.

az group delete --name myapp-rg