Собственная непрерывная интеграция и непрерывное развертывание с помощью Git и Heroku

Я разрабатываю Ruby на сайте rails с помощью heroku и git.

Какие инструменты и функции следует использовать для настройки следующего простого процесса разработки?

CODE > CHECK-IN > AUTO TEST > AUTO DEPLOY

  • Я проверяю свой код в своем репозитории (предпочтительный вариант, размещенный git как github)
  • Тесты автоматически запускаются, и веб-сайт развертывается в моем программном приложении heroku.
  • Если тесты пройдут, веб-сайт будет автоматически развернут в моем приложении heroku для производства.
  • Если тесты терпят неудачу, я хочу как-то уведомить вас.

Как вы это сделаете?

Ответ 1

Мы используем Integrity. Это довольно простое решение - оно не будет делать все под солнцем, но довольно легко настроить и обработать наиболее распространенные варианты использования/функции. Это также довольно легко взломать, если вы хотите, чтобы он сделал больше.

Состояние целостности:

Heroku - самый простой и быстрый способ развертывания Integrity.

Однако:

ПРИМЕЧАНИЕ
Невозможно получить доступ к репозиториям через SSH на Heroku

Это связано с тем, что для вашего приложения Integrity потребуется ключ SSH. Это не невозможно, но определенно несколько обручей, чтобы проскочить. Вам нужно будет предоставить Integrity секретный ключ и поместить его в приложение, а затем взломать Integrity, чтобы использовать этот ключ ssh, когда он инициирует git clone.

Из перечисленных вами вещей автоматическое развертывание, вероятно, является тем, что большинство людей не ожидало, что их сервер CI будет работать (и Integrity не будет предоставлена ​​из коробки). Вам нужно будет настроить git для использования этого ssh-ключа и инициировать git push из соответствующего места (выгруженный репозиторий).

К сожалению, я не знаю подробностей о том, как это сделать - мы фактически запускаем Integrity на VPS.

Ответ 2

CircleCi предлагает именно то, что вам нужно. Мы будем запускать ваши тесты при каждом нажатии, развертывать их, если они передаются (в Heroku или с помощью Capistrano/Fabric/что-либо действительно), и отправлять вам уведомления, если они не работают.

Ответ 3

для предисловия Я являюсь одним из основателей Codeship (https://codeship.io), который является сервисом, который поддерживает именно это.

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

постановка/производство за один раз

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

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

постановка/производство в виде отдельных шагов

У вас могут быть отдельные разделы постановки/производства, которые развертываются в соответствующих приложениях heroku. Преимущество этого заключается в том, чтобы быть быстрее, и вы можете контролировать, когда выпустить определенные части. Специально для приложений, где вы хотите получить внешнюю обратную связь, прежде чем приступать к производству, это отлично работает.

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

Ответ 4

На рынке есть много инструментов, которые делают это. SnapCI предлагает конвейеры развертывания, которые позволяют вам нажимать каждую фиксацию через тесты а затем впоследствии в постановку и производство в качестве различных этапов развертывания трубопровода. У нас также есть полная поддержка распараллеливания тестов, построения ветвей и запросов pull-запросов.

Ответ 5

Ну, есть Хадсон, который обеспечивает плагин git, а также поддержку скриптов. Остальное - это конфигурация, я бы предположил.

Хадсон: http://hudson.dev.java.net

Ответ 6

Попробуйте Heroku-Bartender. Здесь вы можете написать .