Closed Oxore closed 2 years ago
Пока рассматриваю Webpack для сборки конечного артефакта для деплоя. Прочитал и попробовал это: https://archive.jlongster.com/Backend-Apps-with-Webpack--Part-I. Столкнулся с вот такой проблемой: https://stackoverflow.com/questions/44822382/express-pug-and-webpack.
Есть ещё такое: https://www.npmjs.com/package/pkg. Позволяет собрать бинарь со всем кодом и зависмостями. Ничем не лучше docker'а в случае писичана, так что не подходит.
Я решил повременить с оптимизациями. В принципе 40МиБ объём node_modules
- это не так уж и много. Потом оптимизирую.
На сегодняшний день в ветке https://github.com/Oxore/pissychan-front/tree/i10-ci-cd напилена сборка проекта в виде артефакта вместе с прогоном тестов. Дальше планируется сделать деплой по SSH.
С деплоем есть сложность запуска процесса ноды и завершение процесса с предыдущего деплоя. Смотрю в сторону pm2.
Хочу ещё сделать небольшой тест запущенного процесса при деплое. Типа запускать процесс на каком-то тестовом порту, тыкать его curl'ом, смотреть на результат. Если ошибок не выдало и вернуло ожидаемый результат, то завершать этот процесс, завершать старый процесс и запускать новый с нового кода на продакшн порту.
Что было сделано:
Во время работы над CI/CD возникли некотороые мысли о том, что хотелось бы ещё добавить в будущем:
Нужно организовать сборку проекта в один завершённый кусок (например директория или архив) со всеми зависимостями, прогон тестов, деплой на сервер, например по SSH и запуск инстанса, например так же через SSH.
Нужно, чтобы запущенный предыдущий деплой никак не был затронут в процессе выполнения всех этапов, кроме последнего - запуска инстанса.
Докер образы не хочу - будут слишком большой объём занимать. Кроме того сборка докер образов на CI испокон веков являлась нетривиальной задачей из-за того, что сам CI/CD зачастую выполняется в докер контейнере.
Директория
node_modules
данного проекта после установки всех зависимостей весит около 40 МБ. Если удастся найти способ собрать приложение, содержащее исключительно код без вспомогательных необязательных файлов типа README и LICENSE в зависимостях (node_modules
), то будет вообще пушка!