В компании, где я работаю, поднял инфраструктуру, которая состоит из следующих компонентов:
- GitLab (управление git-репозиториями, автоматика Merge Request, проведение Code Review и т. п.)
- Jenkins CI
- Vagrant (работает через провайдера VirtualBox)
- DNSMasq (обслуживает доменную зону внутри офисной ЛВС)
У нас не один проект разрабатывается, а несколько. Поэтому каждый отдельный проект имеет свой vagrant box (либо если проект типовой, то использует base-бокс для типового проекта) со всем необходимым (например, там уже есть composer, набор хипстера для frontend-разработки и так далее). Каждый проект самодостаточен и поставляется вместе с Makefile.
Подход помогает быстро тиражировать проекты и быстро включать нового разработчика в процесс.
В процессе тестирования, через Jenkins CI поднимается очередной проект, получаемый из GitLab и поднимаемый через Vagrant.
Но есть пара нюансов, которые бесят и заставляют напрягать мозги лишний раз:
- Необходимо заводить виртуальный хост проекта в рамках сети руками (есть свой DNS-сервер, который провайдит свою доменную зону внутри офиса).
- Когда заводится виртуальный хост, он настраивается как proxy до вагрант бокса, которому назначен IP (руками вбит в Vagrantfile).
Обе вещи категорически неудобны, но я пока не придумал как это автоматизировать.
В качестве решений есть идеи:
- Написать свою автоматику (веб-сервис) создания виртуальных хостов с базой IP (что выглядит чуть более чем говно).
- Использовать Docker вместо Vagrant
Что можете посоветовать? Имеет ли право на жизнь такая инфраструктура или ее следует реализовать иначе?