Перешли на Continuous Integration при работе с исходным кодом проектов. Цель движения в том, чтобы автоматизировать доставку исходного кода на сервера и перестать работать с исходниками напрямую.
Проект реализован с помощью GitLab и его встроенных методов CI/CD. Транспортный механизм — rsync. В процессе были написаны единые скрипты сборки и деплоя, которые подключаются из отдельного репозитория в gitlab-ci.yml
внутри клиентского проекта. Эти скрипты скачивают внешние зависимости проекта из Composer, деплоят их, деплоят основной код проекта и выполняют постобработку в некоторых случаях. В каждом отдельном клиентском репозитории при необходимости можно переопределить стандартное поведение.
Главная сложность задачи состояла в том, что мы не можем полностью синхронизировать код в гите и на сервере. Мы не храним в GIT ядро CMS, папки с аплоадом и прочий контент. В качестве решения был выбран rsync-filter. Это свойство rsync, позволяющее писать правила синхронизации папок, похожие на gitignore
, но с большей функциональностью. Смысл в том, что какие-то папки мы синхронизируем полностью, в какие-то папки мы только выкладываем новое, но ничего не удаляем, а какие-то полностью игнорируем. Мы приложили усилия по унификации проектов, и эти правила получились несложными и зачастую едиными.
Срок разработки и внедрения проекта — 3-4 месяца. После нескольких месяцев эксплуатации полностью перешли на работу через GitLab CI, и считаем проект успешным.