Ответ 1
Я почти ничего не знаю о Дженкинсе, но я широко использовал Docker на других платформах CI. Поэтому я просто напишу об этом. Уровень сложности будет варьироваться в зависимости от ваших зависимостей и причуд. Я попытаюсь дать схему, которая в целом полезна, и оставлять квитанции приложений для вас.
Я не думаю, что проблема, которую вы описываете, должна требовать, чтобы вы столкнулись с docker-machine
. docker build
и docker-compose
должно быть достаточно.
Сначала вам нужно будет создать образ для своего приложения. Если ваше приложение имеет всеобъемлющий Gemfile
и не слишком много зависимостей, связанных с инфраструктурой и т.д. (Например, файлы, живущие в определенных местах, которые приложение не настроено для себя), тогда у вас будет довольно простое время. Если нет, то настройка этих зависимостей будет сложной. Здесь руководство от пользователей Docker для простого приложения Rails, которое поможет вам начать.
Как только изображение будет построено, нажмите его в репозиторий, например, Docker Hub. Войдите в Docker Hub и создайте репо, затем используйте docker login
и docker push <image-name>
, чтобы сделать изображение доступным для других машин. Это будет важно, если вы хотите создать изображение на одной машине и проверить его на других.
Вероятно, стоит отработать задание, чтобы запускать тесты модулей приложения внутри изображения после того, как изображение построено и нажато. Это позволит вам выйти из строя раньше и не тратить драгоценное время выполнения на исправленную ошибку:)
Далее вам нужно будет удовлетворять внешним зависимостям приложения, таким как Redis и postgres. Вот где находится файл Docker Compose. Используйте его, чтобы указать все службы, которые требуются вашим приложениям, и переменные среды и т.д., Которые вы установите для запуска приложения для тестирования (например, RAILS_ENV
).
Вам может показаться полезным обеспечить фальшивки некоторых несущественных сервисов, таких как кэши в памяти, или просто оставить их полностью. Это уменьшит сложность вашей настройки и будет менее требовательным к вашей системе CI.
В руководстве по приведенной выше ссылке также есть пример создания файла, но вам нужно его расширить. Самое главное отметить, что имя, которое вы даете службе (например, db
в примере из руководства), используется в качестве имени хоста на изображении. Как предположил @tomwj, вы можете искать в Docker Hub для обычных изображений, таких как postgres и Redis, и находить их довольно легко. Вероятно, вам нужно настроить новую среду Rails с новыми именами хостов и так далее, чтобы правильно настроить все имена хостов службы.
Здесь вы начинаете все свои услуги с нуля, включая вашу базу данных, поэтому вам нужно будет перенести и засеять его (и любые другие хранилища данных) при каждом запуске. Поскольку вы начинаете с пустого экземпляра postgres, ожидайте, что потребуется некоторое время. В качестве ярлыка вы можете восстановить резервную копию из предыдущей версии перед ее переносом. В любом случае вам нужно будет сделать некоторую работу, чтобы ваши хранилища данных были в форме, так что ваши результаты теста предоставят вам полезную информацию.
Один из сложнейших битов будет получать Capybara для запуска внутри вашего приложения Docker изображение, которое по умолчанию не будет иметь X-дисплеев. xvfb
(X Virtual Frame Buffer) может помочь в этом. Я не пробовал это, но создание поверх образа, такого как этот, может оказать некоторую помощь.
Удачи вам в этом. Если у вас есть время, чтобы продолжить работу с ним, это действительно поможет вам узнать, на что ваше приложение действительно зависит, чтобы работать. Это, безусловно, для меня и моей команды!