Строим full-stack environment для приватных проектов на основе бесплатных инструментов

Disclaimer: автор не призывает экономить “на спичках”. Вряд ли стоит работать с заказчиком, с которым вы не можете себе позволить $5 на виртуалку в DO и $10 на Jira. Однако всегда есть сайд-проекты, личные эксперименты, случайные разработки на голом энтузиазме – на которые никаких денег не напасёшься, если покупать под каждую отдельный набор. Поэтому мне было интересно собрать full stack (полный комплекс) инструментов, позволяющих построить процесс от разработки до непрерывной интеграции, деплоя и мониторинга – в приватном (закрытом) проекте – исключительно на freeware или бесплатных тарифах публичых сервисов.

Хранение приватных git-репозиториев: Bitbucket

Ближайший аналог: Github. Основное отличие в нашем контексте – хостинг приватных репозиториев здесь бесплатен.

https://bitbucket.org

Сервис непрерывной интеграции и деплоя: SemaphoreCI

Ближайшие аналоги: Travis CI и Bamboo. Сервис SemaphoreCI удобен тем, что легко интегрируется с Heroku – в случае успешного билда тут же выполняет деплой: запушили в релизную ветку – прошёл билд – продукт выкатился на стейдж. Не нужно напрягать мозг и отдельно деплоиться руками.

Ограничение бесплатного тарифа – 100 билдов в месяц.

https://semaphoreci.com/

Среда для препродакшена (stage-хостинг): Heroku

https://heroku.com/

Система лучше всего предназначена для Ruby и PostgreSQL, так что с другими языками (судя по отзывам) вас могут ждать некоторые ограничения. На бесплатном тарифе вам выделяется мощность, примерно эквивалентная VDS с 1 CPU и 512Mb памяти, а так же БД с лимитом на 10К строк. Кроме того, при долгом неиспользовании приложения – экземпляр “засыпает” и при первом последующем запросе “просыпается” в течение 15-20 секунд, что вызывает неприятные ощущения у пользователя (пишут, это можно обойти путём периодического пинга приложения).

Есть огромное количество аддонов: https://addons.heroku.com/

Анализ лог-файлов: Logentries

Есть SQL-подобный интерфейс для построения кастомных выборок по логам, поиск, тэгирование, статистика о количестве возникновений и возможность смотреть “вживую” (аналогично “tail -f” в командной строке).

https://logentries.com/

Анализ метрик производительности: New Relic (RPM)

Данные отстают на пару минут – в среде разработки это несколько мешало бы, но для стейджа – в самый раз.

https://rpm.newrelic.com/

Анализ ошибок: Rollbar

Система строит статистику ошибок – можно легко увидеть тренды и тенденции (какие ошибки случайны, а какие систематически повторяются). Для типовых ошибок тут же показываются варианты решения от других участников сообщества.

Rollbar имеет невероятно милую и навороченную систему настройки правил уведомлений – куда посылать какие уведомления в случае возникновения или устранения каких конкретно проблем (например, посылать сообщение по e-mail в случае повторного возникновения ошибки с уровнем критичности error и выше). В том числе, система умеет создавать github/bitbucket issues по каждой серьёзной ошибке.

В бесплатной версии количество собираемых ошибок (в месяц) ограничено.

https://rollbar.com/

Командный чат: HipChat

https://hipchat.com/

Командный чат – это место не столько для общения, сколько для публикации событий о билдах, тестах и деплое. Есть нативные десктопные и мобильные аппы: удобно получать уведомления, например, о фэйлах билдов – прямо на рабочий стол. Интегрируется практически со всем: https://www.hipchat.com/integrations

Как это всё работает вместе

Весь кайф инструментов – в их совместной интеграции. Перечислю основной набор:

1. Вы делаете обычный пуш в гит.
2. Bitbucket уведомляет SemaphoreCI о пуше.
3. SemaphoreCI начинает процесс сборки (Build).
4. В случае Build successful – SemaphoreCI начинает деплой на Heroku.
5. После успешного деплоя – Heroku уведомляет Rollbar (если вы хотите чистить ошибки от прежней версии).

Если деплой неуспешен, билд зафэйлился, или посыпались ошибки на стейдже – создаются issues в системе трекинга, и вам валятся уведомления в хипчат.

Как это настраивается

Большая часть настроек делается в веб-интерфейсах самих сервисов. У Heroku есть интерфейс командной строки, что иногда вносит путаницу, если вы часть операций сделаете в вебе, а часть – в шелле или файлах.

Практически все сервисы либо реализуют интеграцию “из коробки” по oAuth (путём кликов веб-интерфейсе), либо предоставляют токены, которые нужно прописать настройках или файлах.

Примеры:

Gemfile:
gem ‘rollbar’, ‘~> 1.4.4’
gem ‘newrelic_rpm’

config/initializers/rollbar.rb:
config.access_token = ‘…’

config/newrelic.yml
license_key: ‘…’

Рабочий рецепт для Travis:

rvm:
– 2.2

before_script:
– psql -c ‘create database mycoolproject_test;’ -U postgres

script:
– RAILS_ENV=test bundle exec rake db:migrate –trace
– bundle exec rake db:test:prepare
– bundle exec rake

notifications:
hipchat: …

addons:
postgresql: “9.3”

Чего не хватает?

Не хватает систем code review и автоматизированной оценки качества кода. Есть популярный сервис CodeClimate, однако мне не удалось подключить его к приватному репозиторию в рамках бесплатного тарифного плана.
Если вы знаете, что можно добавить – welcome в комментарии! (здесь или в фейсбуке)