Предоставляет ли какой-либо сервис CI возможность создавать контейнеры Docker и использовать кеш сборки докеров?
У меня есть куча контейнеров Docker, все подключенные с помощью докеры-компоновки (ранее рис.). Я обнаружил, что услуги, которые рекламируют себя как сервисы Docker CI, как правило, просто говорят об использовании Docker для запуска своих рабочих.
Я хотел бы использовать службу непрерывной интеграции, которая сохраняет кеш сборки Docker между запусками, вместо того, чтобы разворачивать полностью новый контекст рабочей/файловой системы/сборки. В противном случае, сборки берутся абсолютно навсегда. Идеально управляемый (в отличие от https://github.com/groupon/DotCi, который не поставляется с готовой к запуску базой данных CircleCI).
Единственное, что я нашел, это TeamCity (старый, вы не можете выполнять задачи сборки в файле yaml, как вы можете, с CircleCI, вам нужно поддерживать инфраструктуру и т.д.). Quay.io не предоставляет такую базу данных, как CircleCI и Travis, поэтому вам нужно раздвоить dev и prod и установить его внутри контейнера и выполнить модульные тесты во время сборки контейнера (ew - вы не можете появиться в незастроенном контейнере, чтобы отлаживайте вещи!).
Как вы выполняете непрерывную интеграцию в кластере контейнеров Docker?
Ответы
Ответ 1
Обновить: CircleCI 2.0 ориентирован на докеры. Вы можете создавать изображения Docker, использовать кеширование слоев, использовать Docker Compose и даже использовать официальные и пользовательские изображения Docker в качестве среды сборки.
CircleCI позволяет создавать контейнеры Docker как часть вашей сборки: https://circleci.com/integrations/docker
Однако вы правы, что мы не кэшируем изображения Docker - это немного сложно в нашем стеке, чтобы сделать это правильно, но мы планируем скоро это сделать.
В то же время ряд клиентов кэшировали его с помощью встроенного кеширования CircleCI (без докеров), используя docker save
/docker load
: https://circleci.com/docs/docker#caching-docker-layers. Это не идеальный вариант, но он должен перевести вас, пока мы не сможем поддерживать это намного лучше.
Ответ 2
В настоящее время я использую CircleCI, см. http://tschottdorf.github.io/cockroach-docker-circleci-continuous-integration для хорошего руководства по использованию кеша докеров
shippable также стоит проверить, так как вся их инфраструктура основана на докере и организует несколько контейнеров докеров с судоходными формациями.
Ответ 3
Теперь Codeship поддерживает хранение кэша изображений Docker и возвращает его, чтобы ускорить ваши сборки.
https://codeship.com/documentation/docker/caching/
Ответ 4
Существует связанный с этим вопрос "Как я могу позволить промежуточным изображениям кэша изображений DinD для gitlab-ci-runner?" .
Даже если наше решение требует минимального объема инфраструктуры (нам нужно запустить собственный бегун), я думаю, что это стоит посмотреть.
В принципе, мы не запускаем Docker в Docker, но мы создаем отдельную виртуальную машину только для бегунов. Это имеет некоторые последствия для задач безопасности и очистки, см. Также README нашего бегуна.
Возможно, это решение станет устаревшим в будущем, поскольку поддержка Docker для различных систем CI улучшится, но сейчас это хорошая смесь между производительностью, техническим обслуживанием и удобством использования.
Ответ 5
Вы видели wercker? Он поддерживает "принести свой собственный контейнер", будет кэшировать ваши изображения (я думаю, на основе каждого рабочего, но после нескольких сборок обычно запуск сводится к нескольким секундам с пользовательским изображением), а afaik также позволяет создавать изображения Docker.
Даунсайд: для него требуется слишком много разрешений GitHub.