Как я деплоймент скрипты на JS писал

В одном из стартапов где я работал, я полностью занимался инфраструктурой. Вначале вся наша микросервисная история деплоилась на Elastic Beanstalk, потом решили переехать на ECS. Для CI/CD зарядили Jenkins и кучу баш-скриптов, осталось научиться деплоить это в прод.

Я взялся за эту задачу и зачем-то решил что все деплоймент скрипты у меня будут на JS. Ну как зачем. Я думал что сделаю полноценную ChatOps систему с blue-green деплоем прямо из слака, а работать все это должно было на AWS Lambda, которая в то время поддерживала только JS, Python и Java. Почему я не взял Python это загадка века. Кажется, потому что JS ставил все нужные пакеты локально и это было типа проще чем виртуалэнвы и прочая питонья дичь. Но это не точно.

В общем задача у меня была такая. Взять список контейнеров которые крутятся на стейджинге, взять список из прода, и заменять инстансы по одному, пока полностью все не обновится. В процессе смотреть чтобы ничего не упало.

Все это я свалил в один большой JS-скрипт на тыщу строк, который с помощью AWS SDK ходил и выяснял нужные наборы сервисов и формировал для ECS таск дефинишены где были прописаны нужные секреты. Helm на минималках короч.

Надо сказать что на JS до того я писал не сильно много, с промисами меня никто не познакомил, а async/await тогда еще не было, node 4. Из-за асинхронщины бывало такое что амазоновский API нас троттлил.

Короче получился один сплошной неподдерживаемый callback hell, просто ужасно всё было. Потом я позвал фуллстек дева и он помог переписать все в более удобоваримый вид. Так оно и прожило кажется два года. ChatOps и деплой из слака я конечно же не сделал. Полноценную CI/CD систему типа Spinnaker тоже не сделал, хотя хотелось. Потом один из разработчиков решил что CLI-утилита для редеплоя это отличный способ заняться resume-driven разработкой и переписал тулзу на Go.

Надо было изначально все нормально делать на питоне, тогда и написал бы лучше, и оно бы хорошо поддерживалось, и переписывать на Go не надо было. В общем с тех пор на JS консольных утилит я больше не делаю, и вам не советую.


Понравился материал? Подписывайся на мой телеграм канал: https://t.me/full_of_hatred