Приложение «Семафор». Рубин На Рельсах. Непрерывная Интеграция/Доставка



Предисловие Покопавшись на Хабре, я на удивление не нашел ни одной статьи о полноценном командном рабочем процессе с использованием различных магических штучек в духе Continuous Integration & Continuous Delivery, различных интеграций Github - HipChat (Slack) - CI - Staging and Production via Continuous. Доставка и так далее.

хотя может я просто не умею искать.



Приложение «Семафор».
</p><p>
 Рубин на рельсах.
</p><p>
 Непрерывная интеграция/доставка

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

поясница во время работы над проектом.

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



Сущность

Знаете, я не буду подробно объяснять, что такое CI, зачем он нужен и прочие общие вещи, потому что до меня их уже объяснили многие господа, ну и наглядно, скажем так, здесь: «Введение в непрерывную интеграцию» .

А теперь самое главное — подключим наше Rails-приложение к Семафору.

Наша большая цель — сделать регистрацию интуитивно понятной, но мы все равно пройдем ее с комментариями и картинками.



Зарегистрироваться
Мы заходим на semaphoreci.com, и крутой парень похвастается нам тем, как здорово он развертывает в продакшене.



Приложение «Семафор».
</p><p>
 Рубин на рельсах.
</p><p>
 Непрерывная интеграция/доставка

У нас есть выбор между GitHub и Bitbucket. По сути, Semaphore поддерживает множество продуктов Atlassian — Bitbucket, Hipchat, Jira. Не так уж и плохо.



Приложение «Семафор».
</p><p>
 Рубин на рельсах.
</p><p>
 Непрерывная интеграция/доставка

Далее просто выберите проект и ветку, которую хотите построить.



Приложение «Семафор».
</p><p>
 Рубин на рельсах.
</p><p>
 Непрерывная интеграция/доставка

Нам будет предложено произвести первоначальные настройки проекта.

Среди предлагаемых языков — Ruby, Clojure, JS, PHP, Go и мифический язык «Другой».

Существуют вариации в зависимости от используемой базы данных.



Приложение «Семафор».
</p><p>
 Рубин на рельсах.
</p><p>
 Непрерывная интеграция/доставка

И это все.

У вас есть собственный CI, 5.times { puts 'ураааа!' }

Приложение «Семафор».
</p><p>
 Рубин на рельсах.
</p><p>
 Непрерывная интеграция/доставка

На самом деле, самое простое — просто нажать на кнопки.

Сложность всей интеграции с другими сервисами будет зависеть от вашего умения нажимать CTRL+C и CTRL+V. Ну, читайте по-английски.

Уровень уверенного пользователя ПК, бухгалтера-переводчика.

И, кстати, интеграция с GitHub и Bitbucket уже произошла.

Если ваша сборка не прошла, вы все равно можете сделать запрос на слияние.

И получить по ушам от тимлида за провальную сборку.



Приложение «Семафор».
</p><p>
 Рубин на рельсах.
</p><p>
 Непрерывная интеграция/доставка

Кстати, если у вас есть конфликтующие ветки, то после сборки, даже прошлой, Семафор не позволит вам объединить ваш конфликтующий PR, пока вы не сделаете git rebase -i your_integration_branch и не исправите все конфликты.

Ну а если вам дали зеленый свет, и ваш пулл-реквест, как в правильной команде, рассмотрели и поставили ОК — можете нажать заветную кнопку и на следующий день похвастаться на стендапе.



Приложение «Семафор».
</p><p>
 Рубин на рельсах.
</p><p>
 Непрерывная интеграция/доставка



Коммуникация
Итак, перейдем к следующей части нашей системы — уведомлениям об успешных/неудачных сборках и просто о внутрикомандном общении.

Вариантов много, я просто предложил HipChat или Slack. Почему — оба бесплатны, Slack выглядит красивее, но интеграций ограничено (всего 5), их немного меньше, чем у HipChat. HipChat — это безлимитные интеграции, но в целом это то же самое, что и Slack, но выглядит немного скучновато.

Не для модных стартапов.

Небольшой пример со всеми интеграциями, которые я делал в одной комнате HipChat.

Приложение «Семафор».
</p><p>
 Рубин на рельсах.
</p><p>
 Непрерывная интеграция/доставка

Собственно, вот все логи того, что произошло с проектом.

И это еще не все, что туда можно интегрировать.

Ошибки Airbrake, оповещения NewRelic и многое другое.

Теперь мы можем увидеть, на что способен Семафор.

Список настроек студии.



Приложение «Семафор».
</p><p>
 Рубин на рельсах.
</p><p>
 Непрерывная интеграция/доставка

Настройки сборки, конфиги, ENV вары, информация о репозитории, можно задавать приоритетные ветки для сборок, запускать сборки по расписанию (не смог понять почему), деплой (о чём чуть позже), вкладка Notifications, которая с помощью пары копий-вставок настраиваются уведомления по электронной почте/в хип-чате/в резервной комнате/в другом месте и так далее.

Для Hipchat вам нужно знать только название комнаты или идентификатор комнаты и токен, которые легко генерируются в настройках HipChat. Просто введите его, и служба уведомлений готова.

Легкий.

Ну и, конечно, есть вебхуки, если вам нужно настроить оповещения где-то еще.



Непрерывное развертывание
Но, пожалуй, стоит закончить мой рассказ на ноте Continuous Deployment с Heroku. Это фиолетовое сообщение на картинке с интеграцией HipChat было уведомлением от Heroku об успешном развертывании.

Хотя, руками я ничего не делал, просто слил свой пул-реквест, который прошел проверку.

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

Допустим, у нас уже есть приложение Rails, и есть сервер Heroku, и наш рабочий процесс состоит в том, чтобы сделать ветку, написать фичу, написать тесты, запустить тесты в ветке, отправить ветку в интеграцию, запустить все интеграционные тесты.

В случае успеха — git push Heroku. Честно говоря, продвижение процесса непрерывной доставки заняло бы у меня меньше времени, чем описание рабочего процесса.

Начнем с интеграции — настройки, вкладка «Развертывание», «Добавить сервер».

Нам предлагают выбор.



Приложение «Семафор».
</p><p>
 Рубин на рельсах.
</p><p>
 Непрерывная интеграция/доставка

Я остановился на героку, выбор за вами.

Далее нам предлагается выбрать тип развертывания: автоматический или ручной.

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

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

Для производства лучше иметь кнопку.

Затем нам будет предложено выбрать ветку для развертывания и ввести API-ключ Heroku. И тогда он сможет все сделать сам.

Вы также можете установить аддон для героку — Deploy Hooks, в котором есть хук HipChat, который будет уведомлять вас об успешных или неудачных развертываниях.

Хотя неудачных развертываний не будет, но если сборка провалится, повторюсь, развертывания не будет. Я надеюсь, что это будет кому-то полезно.

Теги: #rails #непрерывная интеграция #непрерывная доставка #semaphoreapp #heroku #hipchat #Slack #разработка веб-сайтов #ruby onrails

Вместе с данным постом часто просматривают: