Внедрение CI

Автор: Денис Сахаров

Перешли на Continuous Integration при работе с исходным кодом проектов. Цель движения в том, чтобы автоматизировать доставку исходного кода на сервера и перестать работать с исходниками напрямую.

Проект реализован с помощью GitLab и его встроенных методов CI/CD. Транспортный механизм - rsync. В процессе были написаны единые скрипты сборки и деплоя, которые подключаются из отдельного репозитория в .gitlab-ci.yml внутри клиентского проекта. Эти скрипты скачивают внешние зависимости проекта из Composer, деплоят их, деплоят основной код проекта и выполняют постобработку в некоторых случаях. В каждом отдельном клиентском репозитории при необходимости можно переопределить стандартное поведение.

Главная сложность задачи состояла в том, что мы не можем полностью синхронизировать код в гите и на сервере. Мы не храним в GIT ядро CMS, папки с аплоадом и прочий контент. В качестве решения был выбран rsync-filter. Это свойство rsync, позволяющее писать правила синхронизации папок, похожие на .gitignore, но с большей функциональностью. Смысл в том, что какие-то папки мы синхронизируем полностью, в какие-то папки мы только выкладываем новое, но ничего не удаляем, а какие-то полностью игнорируем. Мы приложили усилия по унификации проектов, и эти правила получились несложными и зачастую едиными.

Срок разработки и внедрения проекта - 3-4 месяца. После нескольких месяцев эксплуатации полностью перешли на работу через GitLab CI, и считаем проект успешным.

непрерывная разработка