> ## Content Index
> Fetch the complete content index at: https://www.rozhkov.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# Как я деплоймент скрипты на JS писал
- URL: https://www.rozhkov.me/kak-ia-dieploimient-skripty-na-js-pisal/
- Published: 2021-05-17T06:00:00.000Z
- Updated: 2021-05-17T11:56:54.000Z
- Author: Vova Rozhkov
- Tags: інструменти, кулсторі

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

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

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

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

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

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

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