Disclaimer: автор не призывает экономить “на спичках”. Вряд ли стоит работать с заказчиком, с которым вы не можете себе позволить $5 на виртуалку в DO и $10 на Jira. Однако всегда есть сайд-проекты, личные эксперименты, случайные разработки на голом энтузиазме – на которые никаких денег не напасёшься, если покупать под каждую отдельный набор. Поэтому мне было интересно собрать full stack (полный комплекс) инструментов, позволяющих построить процесс от разработки до непрерывной интеграции, деплоя и мониторинга – в приватном (закрытом) проекте – исключительно на freeware или бесплатных тарифах публичых сервисов.
Хранение приватных git-репозиториев: Bitbucket
Ближайший аналог: Github. Основное отличие в нашем контексте – хостинг приватных репозиториев здесь бесплатен.
Сервис непрерывной интеграции и деплоя: SemaphoreCI
Ближайшие аналоги: Travis CI и Bamboo. Сервис SemaphoreCI удобен тем, что легко интегрируется с Heroku – в случае успешного билда тут же выполняет деплой: запушили в релизную ветку – прошёл билд – продукт выкатился на стейдж. Не нужно напрягать мозг и отдельно деплоиться руками.
Ограничение бесплатного тарифа – 100 билдов в месяц.
Среда для препродакшена (stage-хостинг): Heroku
Система лучше всего предназначена для Ruby и PostgreSQL, так что с другими языками (судя по отзывам) вас могут ждать некоторые ограничения. На бесплатном тарифе вам выделяется мощность, примерно эквивалентная VDS с 1 CPU и 512Mb памяти, а так же БД с лимитом на 10К строк. Кроме того, при долгом неиспользовании приложения – экземпляр “засыпает” и при первом последующем запросе “просыпается” в течение 15-20 секунд, что вызывает неприятные ощущения у пользователя (пишут, это можно обойти путём периодического пинга приложения).
Есть огромное количество аддонов: https://addons.heroku.com/
Анализ лог-файлов: Logentries
Есть SQL-подобный интерфейс для построения кастомных выборок по логам, поиск, тэгирование, статистика о количестве возникновений и возможность смотреть “вживую” (аналогично “tail -f” в командной строке).
Анализ метрик производительности: New Relic (RPM)
Данные отстают на пару минут – в среде разработки это несколько мешало бы, но для стейджа – в самый раз.
Анализ ошибок: Rollbar
Система строит статистику ошибок – можно легко увидеть тренды и тенденции (какие ошибки случайны, а какие систематически повторяются). Для типовых ошибок тут же показываются варианты решения от других участников сообщества.
Rollbar имеет невероятно милую и навороченную систему настройки правил уведомлений – куда посылать какие уведомления в случае возникновения или устранения каких конкретно проблем (например, посылать сообщение по e-mail в случае повторного возникновения ошибки с уровнем критичности error и выше). В том числе, система умеет создавать github/bitbucket issues по каждой серьёзной ошибке.
В бесплатной версии количество собираемых ошибок (в месяц) ограничено.
Командный чат: HipChat
Командный чат – это место не столько для общения, сколько для публикации событий о билдах, тестах и деплое. Есть нативные десктопные и мобильные аппы: удобно получать уведомления, например, о фэйлах билдов – прямо на рабочий стол. Интегрируется практически со всем: https://www.hipchat.com/integrations
Как это всё работает вместе
Весь кайф инструментов – в их совместной интеграции. Перечислю основной набор:
1. Вы делаете обычный пуш в гит.
2. Bitbucket уведомляет SemaphoreCI о пуше.
3. SemaphoreCI начинает процесс сборки (Build).
4. В случае Build successful – SemaphoreCI начинает деплой на Heroku.
5. После успешного деплоя – Heroku уведомляет Rollbar (если вы хотите чистить ошибки от прежней версии).
Если деплой неуспешен, билд зафэйлился, или посыпались ошибки на стейдже – создаются issues в системе трекинга, и вам валятся уведомления в хипчат.
Как это настраивается
Большая часть настроек делается в веб-интерфейсах самих сервисов. У Heroku есть интерфейс командной строки, что иногда вносит путаницу, если вы часть операций сделаете в вебе, а часть – в шелле или файлах.
Практически все сервисы либо реализуют интеграцию “из коробки” по oAuth (путём кликов веб-интерфейсе), либо предоставляют токены, которые нужно прописать настройках или файлах.
Примеры:
gem ‘rollbar’, ‘~> 1.4.4’
gem ‘newrelic_rpm’
config/initializers/rollbar.rb:
config.access_token = ‘…’
config/newrelic.yml
license_key: ‘…’
Рабочий рецепт для Travis:
– 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 в комментарии! (здесь или в фейсбуке)