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.