Как запустить весь конвейер Azure, от начала до конца, внутри контейнера Docker?

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

Я создаю конвейер Azure для создания каждого микросервиса (который включает этапы развертывания mvn, сборки и выпуска докера, выпуска ecr, выпуска mvn). Для сборки Docker необходимы артефакты сборки, созданные на этапе развертывания mvn для создания образа Docker. Я попытался использовать контейнеры в конвейере, которые я написал внутри микросервиса, чтобы запустить конвейер для создания микросервисов.

Кажется, что контейнер инициализируется и работает, но он останавливается после каждого этапа. Сборки, созданные на этапе сборки, отсутствуют, когда выполняется этап сборки и выпуска докера.

в триггерном конвейере:

  containers:
  - container: dockerContainer
    image: image name
    endpoint: dockerhubcreds
    options: --user 0:0

конвейер для создания микросервисов:

  - stage: Build
    dependsOn: SetupMaven
    jobs:
    - job: Build_job
      displayName: Build
      container: dockerContainer

Когда я попробовал описанный выше метод, контейнер останавливался после каждого этапа. Также я использую локальный агент Ubuntu для тестирования и агент Microsoft (Ubuntu-последняя версия) для производства.

какой аспект остановки контейнера влияет на вас?

bryanbcook 27.06.2024 20:39

@bryanbcook У меня есть этапы (развертывание mvn, сборка докера, выпуск, выпуск ecr и выпуск mvn). Для сборки Docker необходимы артефакты сборки, созданные на этапе развертывания mvn для создания образа Docker. В этом случае контейнер останавливается после развертывания mvn, поэтому артефакты сборки из развертывания mvn недоступны на этапе сборки Docker.

Dev0001 01.07.2024 10:27

ОК, проблема в том, что файлы, созданные задачами mvn, не сохраняются между этапами (что происходит независимо от того, является ли это контейнером или стандартными задачами). каковы пути к файлам артефактов сборки, созданных mvn?

bryanbcook 03.07.2024 21:35

Target/project-name.jar, созданный mvn, используется на этапе «сборки докера». Но теперь я сгруппировал все задачи в одну работу. теперь это работает. Когда я попробовал использовать автономный агент в контейнере Docker, я получил ошибку ##[ошибка]ОШИБКА: невозможно подключиться к демону Docker по адресу unix:///var/run/docker.sock. Демон докера запущен? ##[ошибка]Процесс «/usr/bin/docker» завершился с ошибкой с кодом завершения 1.

Dev0001 04.07.2024 13:17

Если вы используете локальный агент как образ Docker и пытаетесь запустить Docker внутри него, требуется дополнительная настройка вашего агента сборки.

bryanbcook 04.07.2024 16:29
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
117
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Контейнеры используются на уровне задания, а не на этапе. Контейнеры можно использовать для запуска списка задач внутри задания, а не этапа. Если вам нужен детальный контроль на уровне отдельного шага, цели шага позволяют вам выбирать контейнер или хост для каждого шага.

Дополнительные сведения см. в разделе Определить задания контейнера.

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

bryanbcook 27.06.2024 20:34

@bryanbcook да, это правильно.

Rui Jarimba 27.06.2024 23:33
Ответ принят как подходящий

Как упомянул @Rui Jarimba, контейнеры используются на уровне заданий. Если вы используете агент, размещенный на MS, каждое задание получает новый агент, и контейнер также будет совершенно новым.

Если вы хотите, чтобы все ваши этапы/задания выполнялись в одном контейнере, вы можете настроить автономный агент в Docker и использовать его для запуска вашего конвейера. Подробные инструкции см. в разделе Запуск автономного агента в Docker.

Примечание. При запуске изображения НЕ добавляйте --once в docker run. В противном случае, используя флаг --once, вы получите новый контейнер агента для каждого задания конвейера.

Большое спасибо за ответ. Если я настрою автономный агент в контейнере Docker, все ли, кому нужно запустить конвейер, также установят автономный агент?

Dev0001 01.07.2024 12:14

Нет. После того как вы настроили автономный агент, вы сможете увидеть его в пуле агентов. Любой, у кого есть разрешения на доступ к пулу агентов, может использовать его в конвейере. Подробные сведения о разрешениях см. в разделе Настройка безопасности пула агентов в Azure Pipelines.

Ziyang Liu-MSFT 01.07.2024 15:51

Основная концепция конвейеров не выполняется сквозным образом как единый процесс. Конвейер может выполнять несколько заданий последовательно или одновременно в различных операционных системах. Задания ограничены агентами, и каждое задание потенциально может использовать другого агента. Если вы разделите свой процесс на различные этапы или задания, вы не сможете делать предположения о результатах работы файловой системы из предыдущих заданий.

Если у вас многоэтапный конвейер и вы хотите сделать предположения о файловой системе, вам необходимо гарантировать состояние файловой системы для этого задания. Это достигается путем создания артефактов конвейера, которые можно переносить с одного этапа на другой.

Задача download загружает артефакты в папку $(Pipeline.Workspace)/<artifact-name>. В идеале вы должны смонтировать эту папку в свой контейнер, но папка должна существовать заранее. Поскольку контейнер уже монтирует рабочую область, вы можете скопировать артефакт в желаемое предполагаемое место.

Например, если вы хотите использовать maven для создания артефакта сборки, который будет развернут позже на другом этапе. Этот процесс тот же, если вы используете контейнеры.


stages:
- stage: build
  jobs:
  - job: build
    steps:
    # steps to build artifact located in /target/project-name.jar
    - ...

    # publish /target folder as artifact to be available for next stage
    - publish: $(Build.SourcesDirectory)/target
      artifact: build
      displayName: 'Publish Build Artifact'

- stage: deploy
  jobs:
  - job: deploy
    steps:
    # download build artifact
    - download: current
      artifact: build
      displayName: 'Download Build Artifact'

    - task: CopyFiles@2 # move artifact into the original folder
      inputs:
        sourceFolder: $(Pipeline.Workspace)/build
        taregetFolder: $(Build.SourcesDirectory)/target

    # steps to work with the artifact like it was already there
    - ...

Другие вопросы по теме

Похожие вопросы

Как добавить встроенное изображение в описание или комментарий рабочего элемента Azure Devops с помощью WorkItemTrackingHttpClient?
Azure – RBAC для группы управления
Как назначить разрешения на уровне организации для создания репозиториев во всех проектах организации в Azure DevOps?
Развертывание веб-приложения Python (Dash) в Azure, конвейер работает слишком долго, а колесо создания сообщений для панд все еще работает. Как оптимизировать?
Нет кнопки «Импортировать конвейер» в Azure DevOps
Не удалось войти в систему для пользователя «<участник, идентифицированный токеном>» при авторизации на SQL Server через субъект-службу из назначенной группы AAD
Доступ к артефактам конвейера Azure DevOps из другой организации
Конвейеры ADO YAML | Как получить секретную переменную из группы переменных на основе значения другой переменной
Аутентификация с использованием Azure CLI поддерживается только для пользователя (а не для субъекта-службы)
Почему Azure Pipelines устанавливает неправильную версию .NET SDK (согласно global.json)