CI/CD за один вечер, или что я вынес из настройки пайплайна
Настраивал для этого сайта пайплайн по образцу более крупного проекта. Иногда пример от большого проекта может стать причиной неоднозначных и трудноуловимых ошибок. Но как говориться "дорогу осилит идущий", и вот пара выводов по настройкам для небольших пет-проектов:
1. DooD проще SSH
Деплой через смонтированный /var/run/docker.sock на раннере убирает
целый класс проблем с ключами и доступом. Пайплайн просто управляет
хостовым Docker'ом напрямую. Менее безопасно? Да, однозначно, но мы и не международный интерпрайз солюшн тут разворачиваем, а геморра на порядок меньше.
2. Релизы — каталоги + symlink
Каждый релиз — каталог releases/<sha>, symlink current переключается
на него. Откат = переключить symlink обратно. Хранить 3-4 последних, или сколько вам надо для спокойного сна. Теги git'а использовать не так удобно при отправке кода в репо, по сравнению с таймштампом, но различать релизы на сервере намного проще.
3. Абсолютные пути в bind-mount
Самая долгая отладка вечера: bind-mount через symlink (current) Docker
резолвит непредсказуемо при пересоздании контейнера (или непредсказуемо для чайников/новичков/прочих вайбкодеров вроде меня). Лечится передачей абсолютного реального пути через переменную окружения в compose.
Smoke-тест после деплоя обязателен — а то я дважды (по крайней мере дважды заметил) пустил битый релиз в прод и потом долго искал причину, пока URL гордо показывал 404.