U-Me-Chan / pissychan-front

SSR Frontend for Pissykaka imageboard engine (https://github.com/U-Me-Chan/pissykaka)
Do What The F*ck You Want To Public License
1 stars 2 forks source link

Настроить CI/CD #10

Closed Oxore closed 2 years ago

Oxore commented 3 years ago

Нужно организовать сборку проекта в один завершённый кусок (например директория или архив) со всеми зависимостями, прогон тестов, деплой на сервер, например по SSH и запуск инстанса, например так же через SSH.

Нужно, чтобы запущенный предыдущий деплой никак не был затронут в процессе выполнения всех этапов, кроме последнего - запуска инстанса.

Докер образы не хочу - будут слишком большой объём занимать. Кроме того сборка докер образов на CI испокон веков являлась нетривиальной задачей из-за того, что сам CI/CD зачастую выполняется в докер контейнере.

Директория node_modules данного проекта после установки всех зависимостей весит около 40 МБ. Если удастся найти способ собрать приложение, содержащее исключительно код без вспомогательных необязательных файлов типа README и LICENSE в зависимостях (node_modules), то будет вообще пушка!

Oxore commented 3 years ago

Пока рассматриваю Webpack для сборки конечного артефакта для деплоя. Прочитал и попробовал это: https://archive.jlongster.com/Backend-Apps-with-Webpack--Part-I. Столкнулся с вот такой проблемой: https://stackoverflow.com/questions/44822382/express-pug-and-webpack.

Oxore commented 3 years ago

Есть ещё такое: https://www.npmjs.com/package/pkg. Позволяет собрать бинарь со всем кодом и зависмостями. Ничем не лучше docker'а в случае писичана, так что не подходит.

Oxore commented 3 years ago

Я решил повременить с оптимизациями. В принципе 40МиБ объём node_modules - это не так уж и много. Потом оптимизирую.

На сегодняшний день в ветке https://github.com/Oxore/pissychan-front/tree/i10-ci-cd напилена сборка проекта в виде артефакта вместе с прогоном тестов. Дальше планируется сделать деплой по SSH.

С деплоем есть сложность запуска процесса ноды и завершение процесса с предыдущего деплоя. Смотрю в сторону pm2.

Хочу ещё сделать небольшой тест запущенного процесса при деплое. Типа запускать процесс на каком-то тестовом порту, тыкать его curl'ом, смотреть на результат. Если ошибок не выдало и вернуло ожидаемый результат, то завершать этот процесс, завершать старый процесс и запускать новый с нового кода на продакшн порту.

Oxore commented 2 years ago

Что было сделано:

Во время работы над CI/CD возникли некотороые мысли о том, что хотелось бы ещё добавить в будущем: