Создание и публикация образов 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 выберите значок gear icon шестеренки, чтобы перейти к параметрам проекта.

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

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

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

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

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

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

    A screenshot showing how to set up an agent.

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

  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 , если вы хотите запустить агент в качестве службы.

    A screenshot showing how to set up an agent on an Azure VM.

  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.

    A screenshot showing the agent available in the agents tab.

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

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

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

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

    A screenshot showing how to enable system-assigned identity.

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

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

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

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

    A screenshot showing how to set up acrpull and push roles.

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

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

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

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

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

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

  6. Введите имя подключения к службе, а затем проверка разрешение на доступ ко всем конвейерам проверка box. Чтобы выбрать этот параметр, потребуется роль подключения службы Администратор istrator.

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

    A screenshot showing how to set up a docker registry service connection MSI.

Создание и публикация в Реестр контейнеров 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, а затем выберите репозитории.

    A screenshot showing the image in Azure portal.

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

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

az group delete --name myapp-rg