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


Создание и отправка образов контейнеров в реестры с помощью Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

В этой статье описано, как настроить и настроить azure Pipelines для создания и отправки образа Docker в Реестр контейнеров Azure, Docker Hub и Реестр артефактов Google. Кроме того, он подробно описывает использование безопасной System.AccessToken проверки подлинности в конвейере.

В этой статье описаны инструкции по настройке и настройке azure Pipelines для создания и отправки образа Docker в Центр Docker и Реестр артефактов Google. Кроме того, он подробно описывает использование безопасной System.AccessToken проверки подлинности в конвейере.

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

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

  • Проект Azure DevOps.
  • Реестр контейнеров (Docker Hub, Реестр артефактов Google или Реестр контейнеров Azure).
  • Репозиторий GitHub с Dockerfile. Если у вас нет этого репозитория, вы можете использовать пример репозитория в браузере, перейдите к примеру репозитория, а затем введите его в учетную запись GitHub.
  • Docker (Далее: Docker). При использовании локального агента убедитесь, что Docker установлен и подсистема Docker работает с повышенными привилегиями. Размещенные корпорацией Майкрософт агенты предустановили Docker.
  • Проект Azure DevOps.
  • Реестр контейнеров (Docker Hub или Реестр артефактов Google).
  • Репозиторий GitHub с Dockerfile. Если у вас нет этого репозитория, вы можете использовать пример репозитория в браузере, перейдите к примеру репозитория, а затем введите его в учетную запись GitHub.
  • Docker (Далее: Docker). При использовании локального агента убедитесь, что Docker установлен и подсистема Docker работает с повышенными привилегиями. Размещенные корпорацией Майкрософт агенты предустановили Docker.

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

Перед отправкой образов контейнеров в реестр необходимо создать подключение к службе в Azure DevOps. Это подключение службы сохраняет учетные данные, необходимые для безопасной проверки подлинности в реестре контейнеров. Перейдите на страницу подключений к службе в проекте Azure DevOps, чтобы создать новое подключение к службе и выберите тип подключения Реестра Docker.

Существуют различные процессы для создания подключения к службе для Центра Docker и реестра артефактов Google.

Выберите параметр Docker Hub в разделе Подключение службы реестра Docker и укажите имя пользователя и пароль для создания подключения к службе Docker.

Создание Azure Pipeline для создания и отправки образа Docker

Задача Docker@2 предназначена для упрощения процесса создания, отправки и управления образами Docker в Azure Pipelines. Эта задача поддерживает широкий спектр команд Docker, включая сборку, отправку, вход, выход, запуск, остановку и запуск.

Ниже описано, как создать конвейер YAML, использующий задачу Docker@2 для сборки и отправки образа.

  1. Перейдите к проекту Azure DevOps и выберите Pipelines в меню слева.

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

  3. Выберите GitHub или GitHub Enterprise Server в качестве расположения исходного кода.

  4. Если вы еще не сделали этого, авторизуйте Azure Pipelines для подключения к учетной записи GitHub Enterprise Server.

    1. Выберите "Подключиться к GitHub Enterprise Server".
    2. Введите сведения о учетной записи, а затем нажмите кнопку "Проверить и сохранить".
  5. Выберите репозиторий. Если вы перенаправлены на GitHub

  6. Выберите шаблон конвейера Starter, чтобы создать базовую конфигурацию конвейера.

  7. Замените содержимое azure-pipelines.yml следующим кодом.

  8. В зависимости от того, развертываете ли вы приложение Linux или Windows, убедитесь в том, что для vmImage вас установлено значение ubuntu-latest или windows-latest. Если вы используете автономный агент, задайте vmImage имя пула, содержащего автономный агент с возможностями Docker. Вы можете добавить свойство, чтобы убедиться, demands: docker что выбран агент с установленным Docker.

  9. Замените <docker connection> именем созданного ранее подключения службы Docker.

  10. Замените <target repository name> именем репозитория в реестре контейнеров, где нужно отправить образ. Например, <your-docker-hub-username>/<repository-name>.

    
     trigger:
     - main
    
     pool:
     vmImage: 'ubuntu-latest' 
    
     variables:
     repositoryName: '<target repository name>'
    
     steps:
     - task: Docker@2
     inputs:
     containerRegistry: '<docker connection>'
     repository: $(repositoryName)
     command: 'buildAndPush'
     Dockerfile: '**/Dockerfile'
    
    
  11. По завершении нажмите кнопку "Сохранить и запустить".

  12. При сохранении файла azure-pipelines.yml в репозитории появится запрос на добавление сообщения фиксации. Введите сообщение, а затем нажмите кнопку "Сохранить и запустить".

При использовании локальных агентов убедитесь, что Docker установлен на узле агента, а подсистема Или управляющая программа Docker работает с повышенными привилегиями.

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

  1. Перейдите в коллекцию и создайте проект.

  2. В проекте выберите "Конвейеры".

  3. Выберите Создать конвейер.

  4. Выберите GitHub Enterprise Server в качестве расположения исходного кода.

  5. Если вы еще не сделали этого, авторизуйте Azure Pipelines для подключения к учетной записи GitHub Enterprise Server.

    1. Выберите "Подключиться к GitHub Enterprise Server".
    2. Введите сведения о учетной записи, а затем нажмите кнопку "Проверить и сохранить".
  6. Выберите репозиторий. Если вы перенаправляетесь на GitHub, чтобы установить приложение Azure Pipelines, выберите " Утвердить и установить".

  7. Чтобы настроить конвейер, выберите шаблон образа Docker.

  8. В редакторе конвейера YAML замените содержимое ФАЙЛА YAML следующим кодом. Замените имя пула именем пула, содержащего локальный агент с возможностью Docker.

  9. В зависимости от того, развертываете ли вы приложение Linux или Windows, убедитесь в том, что для vmImage вас установлено значение ubuntu-latest или windows-latest.

  10. Замените <target repository name> именем репозитория в реестре контейнеров, где нужно отправить образ. Например, <your-docker-hub-username>/<repository-name>.

  11. Замените <docker connection> именем созданного ранее подключения службы Docker.

    
    trigger:
    - main
    
    pool:
    name: default
    demands: docker
    
    variables:
    repositoryName: '<target repository name>'
    
    steps:
    - task: Docker@2
    inputs:
    containerRegistry: '<docker connection>'
    repository: $(repositoryName)
    command: 'buildAndPush'
    Dockerfile: '**/Dockerfile'
    
    
  12. Выберите Сохранить и выполнить.

  13. На странице "Сохранить и запустить" нажмите кнопку "Сохранить и снова запустить".

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

Использование System.AccessToken для проверки подлинности в задаче Docker@2

Вы можете пройти проверку подлинности с помощью реестра контейнеров, предоставленного System.AccessToken Azure DevOps. Этот маркер обеспечивает безопасный доступ к ресурсам в конвейере без предоставления конфиденциальных учетных данных.

В следующем примере конвейера YAML задача Docker@2 используется для входа в реестр контейнеров и отправки образа Docker. Он System.AccessToken устанавливается в качестве переменной среды для проверки подлинности команд Docker.

Замените <docker connection> именем подключения службы реестра Docker. Замените <your repository> именем репозитория Docker.

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  SYSTEM_ACCESSTOKEN: $(System.AccessToken)

steps:
- task: Docker@2
  inputs:
    command: login
    containerRegistry: '<docker connection>'
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

- task: Docker@2
  inputs:
    command: buildAndPush
    repository: '<your repository>'
    dockerfile: '**/Dockerfile'
    tags: |
      $(Build.BuildId)
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)