CI-тестирование с помощью docker-compose на Jenkins с Kubernetes - PullRequest
0 голосов
/ 06 мая 2018

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

Я ищу решения, которые позволят мне запустить docker-compose. Я нашел решения для запуска docker, но не для запуска docker-compose.

Я надеюсь, что кто-то еще имел этот вариант использования и нашел решение.


Редактировать: Позвольте мне уточнить мой вариант использования:

  1. Когда я обнаруживаю допустимый триггер (т. Е. Нажимаем на репо), мне нужно начать новую работу.
  2. Мне нужно настроить среду с несколькими докерами / экземплярами (docker-compose).
  3. Экземплярам в этой среде требуется доступ к коду из git (монтировать тома / создавать новые образы с данными).
  4. Мне нужно запустить тесты в этой среде.
  5. Мне нужно затем извлечь результаты из этих экземпляров (результаты теста JUnit для анализа Jenkins).

У меня проблемы с 2 и 3.

Для 2 существует проблема при выполнении этого параллельно (более одного задания), так как контекст докера является общим (проблемы docker-in-docker). Если это работает более чем на одном узле, то я получаю столкновения из-за общих ресурсов (например, портов). Мой обходной путь - ограничить его только одним работающим экземпляром и поставить в очередь остальные (не идеально для CI)

Для 3 существует проблема с монтированием томов, поскольку контекст докера является общим (проблемы с Docker-in-Docker). Я не могу смонтировать код, который я извлекаю в задании, потому что его нет на хосте, который отвечает за запуск экземпляров докера, которые я запускаю. Мой обходной путь - создать новое изображение из моего шаблона и просто скопировать код в новое изображение, а затем использовать его для теста (это работает, но означает, что мне нужно использовать трюки docker cp для возврата данных, что тоже не идеал)

1 Ответ

0 голосов
/ 07 мая 2018

Я думаю, что лучше использовать чистые ресурсы Kubernetes для запуска тестов непосредственно Kubernetes, а не docker-compose.

Вы можете конвертировать ваши файлы docker-compose в ресурсы Kubernetes, используя kompose утилиту .

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

В любом случае, я определенно рекомендую вам использовать абстракции Kubernetes вместо того, чтобы запускать такие инструменты, как docker-compose внутри Kubernetes.

Более того, вы по-прежнему сможете запускать тесты локально, используя Minikube, чтобы создавать небольшой кластер «все в одном» прямо на вашем ПК.

...