Непрерывная интеграция для Ruby on Rails?

Я искал решение для непрерывной интеграции для Ruby on Rails, но не был доволен результатами. Я пришел из магазина .NET, который использовал CruiseControl.NET и был действительно испорчен с его простотой использования и богатым статусом/отчетами.

В идеале ищу:

  • Очевидные Git/SVN и Test:: Unit интеграция

  • Интеграция с Rake и/или Capistrano

  • Веб-интерфейс, показывающий статус сборки

  • Уведомление по электронной почте о неудачных сборках.

  • Уведомление рабочего стола (потенциально через Growl)

  • API REST для статусов сборки

  • Плагиновая среда для работы с другими инструментами анализа кода и отчетами в пользовательском интерфейсе

Ответ 1

Я просто воспользовался вариантами здесь и подумал, что скрою их с конца 2011 года.

Integrity

После опыта почти смерти, который оставил связанный с веб-сайт с устаревшей информацией и сбил демонстрационный сайт, этот проект снова искра жизни. Но документация не продвинулась, и много-много шагов в учебнике просто сломаны; Мне пришлось менять ссылки на драгоценные камни, создавать некоторые вещи вне группы, а затем я все еще не мог заставить его работать.

Cruise Control.rb

Dead simple: вы просто загрузите его, запустите командную строку, чтобы добавить свой проект (для этого есть без интерфейса пользователя) и запустите приложение Rails. Но нет никакого пользовательского интерфейса для редактирования вашего проекта, и там нет реальной интеграции с артефактами сборки, кроме отображения ссылок на них: вы не получаете графиков тестов, линий тренда и т.д. Я также имел отрегулировать файл routes.rb, чтобы заставить работать ссылка на код (строка resources :projects должна перемещаться ниже всех других маршрутов, отличных от по умолчанию).

TeamCity

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

Jenkins (née Hudson)

Это Java stalwart и загружен с тысячей опций, поэтому пользовательский интерфейс запутывает, и он выполняет работу по настройке ваших проектов. Но как только вы его настроите, вы получите множество плагинов, которые могут вытаскивать из любого места, запускать большинство всего и сообщать обо всем. Установщик OS X указывает Jenkins на /Users/Shared/Jenkins/Home, но не создает этот каталог или chown его на daemon (который используется по умолчанию, и вы должны перейти к новому пользователю jenkins, чтобы вы могли настроить интеграцию GitHub).

Другие

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

  • CI Joe хочет владеть репо GitHub больше, чем я хочу, и его создатели даже не используют его; они на Дженкинса.
  • Cerberus кажется довольно маленьким, но не имеет пользовательского интерфейса и не публикует автоматически артефакты сборки, где другие могут их видеть.
  • BigTuna кажется клоном CruiseControl.rb без поддержки (уже минимального) сообщества.
  • Bamboo выглядит очень аккуратно, если вы используете JIRA и BitBucket, но мы не используем их. Он развертывается, но у нас уже есть те, что настроены в Capistrano.

Выбор

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

Ответ 2

Как насчет CruiseControl.rb?

Та же толпа, что и CruiseControl (thoughtworks) и написана в Ruby. Очень простой в использовании Rake для интеграции ваших других инструментов и вы можете использовать рубиновый рычаг для ваших уведомлений.

Ответ 3

Вы также можете рассмотреть Hudson. Он предназначен для использования с проектами Java, хотя имеется большой выбор доступных плагинов, включая поддержку Ruby и Rake. Он имеет очень полезный веб-интерфейс и поддерживает уведомления по электронной почте, а также многие другие (например, твиттер или гигантские медвежьи лампы).

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

Еще один взгляд на Team City, который является бесплатным для небольших проектов и команд (в том числе коммерческих). Мне очень нравится Team City и раньше использовал его для других проектов, но в настоящее время мы используем Mercurial для управления исходным кодом, а поддержка Team City была слишком бета-версией, когда мы рассматривали ее.

Я переключился с CruiseControl.net на Team City и был абсолютно потрясен улучшением. Я частично отношусь к Хадсону, хотя из-за его сходного набора функций и очень активного сообщества.

Ответ 4

Circle является расширенной службой CI для Rails (и других веб-приложений). Из вашего списка он поддерживает следующее:

  • Git и Test:: Unit (также RSpec, Cucumber, Jasmine, Konacha и поддерживает любые дополнительные команды тестирования)
  • Интеграция с Rake и/или Capistrano (использует Rake для запуска команд и настройки баз данных, поддержки непрерывного развертывания с использованием Capistrano или Heroku или что-то действительно)
  • Веб-интерфейс, показывающий статус сборки
  • Уведомление по электронной почте о неудавшихся сборках.
  • Уведомление о рабочем месте (через CCMenu/CCTray)
  • API REST для статусов сборки
  • Плагин для работы с другими инструментами анализа кода и отчетами в пользовательском интерфейсе (мы можем запускать произвольные команды и поддержку, включая их статус как часть сборки)

Мы с Джоэлом проводили беседу об этом в подкасте Stackoverflow - проверить его!


(править) Отказ от ответственности: Пол Биггар основал Circle, поскольку он заявляет в своем профиле Stackoverflow

Ответ 5

Semaphore - это новое размещенное приложение CI для приложений Ruby и Rails. Он интегрируется с GitHub, не требует настройки и имеет простой интерфейс.

Ответ 6

Отъезд Tddium. Tddium поддерживает непрерывную интеграцию, развертывание и интерактивное тестирование приложений Ruby. Он обеспечивает управляемую среду с поддержкой Selenium, Headless Webkit и Solr. В нем размещаются живые сообщения Postgres, MySQL, Mongo и Redis. И он автоматически распараллеливает большие тестовые пакеты.

Ответ 7

Обновлено фев-2015

Codeship

Не было развития на Drone.io, поэтому я переключился на Codeship, и я полностью наслаждаюсь этим. Он активно развивается и совершенствуется, имеет отличный дизайн и очень быстрый. Кроме того, для нижнего уровня он фактически свободен (до 100 сборок в месяц), поэтому он оказался дешевле, чем Drone.io.

Оригинальный ответ

Drone.io

Я просто установил наше основное приложение Ruby on Rails с http://drone.io/. Был кусок пирога, и он получил отличный интерфейс. Я бы сказал, стоит проверить, ищете ли вы простую, размещенную версию.

Ответ 9

Как и многие люди, я был большим поклонником cruisecontrol.rb, но недавно переключил свои проекты на Integrity.

Легкий и простой в установке (как и cc.rb), но с более удобным интерфейсом.

Ответ 10

Travis CI стал популярным в мире рубинов: http://travis-ci.org/

Ответ 11

BigTuna - написанный в Ruby, использует Rails и использует себя как свой CI.

Ответ 12

Вы можете дать Codeship спину и посмотреть, работает ли она для вас (я один из основателей)

Непрерывная интеграция и развертывание на основе облачных вычислений (со специальной поддержкой Heroku)

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

  • Очевидная интеграция Git/SVN и Test:: Unit
  • Интеграция с Rake и/или Capistrano
  • Веб-интерфейс, показывающий статус сборки
  • Уведомление по электронной почте о неудачных сборках.

Мы также работаем над этими функциями:

  • Уведомление рабочего стола (возможно через Growl)
  • API REST для статусов сборки
  • Плагиновая среда для запуска других инструментов анализа кода и отчетов в пользовательском интерфейсе

Ответ 16

Сделай это сам. Напишите bash script для запуска тестов, а затем выполните процедуру развертывания, если тесты пройдут. Нужны уведомления? Стреляйте в простой текстовый адрес об успехе/неудаче. Нужен планировщик? Cronjob. Это $0/мес., И у вас будет ключ к тому, что вы делаете. Я не понимаю, как заплатить кому-то $40/mo поможет мне сделать это в любом случае более эффективно.

Рассмотрим, например: мое развертывание не работает из-за неправильно сконфигурированного конвейера активов (активы не прекомпилируются). Это не будет улавливаться единичным, функциональным, интеграционным, регрессионным или любым другим тестом. Эта ошибка не будет обнаружена CI. Количество времени, которое я потратил на создание bash script, вероятно, будет меньше времени, которое я потратил бы на настройку среды CI, и я сэкономлю себе $40/mo.

Juuuuuust бросил мои две гроши в обсуждение; )

Ответ 17

Запуск кода запуска может быть то, что вам нужно.

Изменить: ссылка удалена, поскольку она больше не относится к первому сайту Run Code Run.

Ответ 18

И затем, CI Joe:

Это похоже на старый ржавый пикап: он может быть вонючим и грубым, но он выполняет свою работу.

Мы используем его ежедневно.

Ответ 19

Мне нравится только CI joe, у меня были проблемы со всем остальным, CI Joe является абсолютным минимумом, чтобы выполнить работу, супер Agile и надежный. Источник хадсона ужасен, и пользовательский интерфейс не обращается ко мне.

Ответ 20

Я только что опубликовал очень простое приложение непрерывной интеграции для RubyOnRails + SVN/ GIT. Возможно, вам стоит попробовать:

http://github.com/felipegiotto/Inotegration/tree/master

Я взял некоторые идеи для инструментов измерения и тестирования, и, попробовав некоторые инструменты CI и не любя никого из них, я решил создать свой собственный, без необходимости создавать большие XML файлы или любую другую конфигурацию. Именно так был создан Rails.

Если вам нравится, пожалуйста, пришлите мне обратную связь.

С уважением,

Фелипе Джотто.

Ответ 21

Выполнение CI после каждого коммита кажется довольно дорогостоящим, если вы подписываетесь на философию "совершать часто". Как пропустить простой cronjob каждые несколько часов и отправить результаты поиска в список рассылки dev?

Ответ 22

Я просто настроил для этого Хадсона/Дженкинса. Драгоценный камень ci_reporter может помочь форматировать вывод JUnit, что ожидалось от Hudson, а у Hudson есть плагин Rails, поэтому я могу видеть покрытие rcov, отчеты об испытаниях, статистику рельсов и даже больше.

Ответ 23

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