Научился немного в gitlab ci/cd, и деплоить через него в heroku. Оказывается это очень весело :)
Теперь у меня, по крайней мере для меня, очень сложный вопрос.
Вот например у нас есть
project - папка с проектом, тут всякие конфиги для докера, сам docker-compose и тд
-> api - тут папка с апишкой: ларовский проект, с отдельным гитом, настроенным ci/cd, все пушится на отдельные stage и production в heroku
-> front - так же отдельная папка, но уже с фронтом написанным на вью, так же все деплоится через ci/cd на heroku
-> go - еще отдельная папка, с моими попытками в го, так же пушится через ci/cd на heroku
В общем, пока что это все работает и тыкается
Но меня не устраивает то, что если я что то меняю, то приходится это все по отдельности запушивать по гитам. Или это нормально? или можно как то все объединить в один гит проект и чтобы там все как то само настраивалось? Интересно как будет решаться вопрос если например апи запушится, а фронт зафейлится на этапе сборки, или фронт собирется, а апи зафейлится на тестах, как это регулировать?
в ci/cd фронт просто собирается, в stage и потом в прод. А бек собирается, тестится, в stage и потом в прод
У меня похожая история. Есть 3 проекта. Один это лицо на VUE это отдельная папка. Но докера там нет, я просто все билдю и заливаю в папку на AWS S3 от туда все работает как статичный сайт.
Есть АПИ на РНР. Так образ докера локально запущен и я его ни когда даже не обновляю. Один раз все настроил и все, только файлы РНР редактирую. А если надо запушить, то написал команду, она делает новый образ, закачивает его в AWS ECR и убивает текущий конейтнер там, так что он перезапускается с новым образом, что занимает от 10 до 30 секунд.
Есть проект на ГО. Это среда работы каждого проекта созданного в приложении. С ним такаяже история. Работает локально с вотчером, я просто фалы редактирую, если надо запушить тоже самое.
Ну да все делаю отдельно получается. Хотя думаю не сложно будет написать небольшой баш скрипт который будет одной командой делать все. Ведь все делается командами в комодной строке, так что просто поставить их одна за другой и все.
Это не ответ, а поделился опытом. Может действительно есть более элегантные решения для этого вопроса, буду следить за темой.
Редакция
Думаю весь вопрос тут в синхронизации. Например выпустил новую версию АПИ, а сайт с ним еще работать не может ил наоборот и нужно все сделать одновременно. Я думаю здесь лучшим решением будет следующее.
Внедряем в приложение паузу. Например вы устанавливаете флаг что идет обновление. Все кто пользуются приложением, получают окно предупреждения что они должны подождать пока идет обновление и не могут ни чего делать. В это время вы спокойно обновляете все образы, и когда все готово снимете флаг.
А еще лучше написать баш скрипт который будет делать это все, и ставить эту работу в план. Например все готово к доставке в продкшн. Вы ставите расписание на 12.00 ночи этого дня, и в 12.00 обновление само произойдет. Зарание поставит флаг, предупредит пользователей, может письмо разошлет за 2-3 часа, в зависимости от критичности островки работы приложения.
1. Можно настроить автоматический билд всех компонентов, если пуш был только в один.
2. Можно настроить деплоймент отдельной джобой и запускать ее если все компоненты собрались.
2. Можно пойти по semver и деплоить совместимые версии, но да надо следить за инвентори версий
3. Сборка - одно, деплой - другое. Несколько енвайрнментов, автоматом деплоится на какой-то тестовый, после чего делается снепшот версий. На следующие енвайрнменты деплоится уже этот снепшот, в котором все версии компонентов совместимы и работают
4. можно и в один гит.
Ну то есть вариантов полно, надо смотреть по общему SDLC