Правильная непрерывная интеграция и непрерывное развертывание с Git и Heroku
Я разрабатываю веб-сайт ruby on rails, используя heroku и git.
какие инструменты и функции следует использовать для настройки следующего простого процесса разработки?
КОД > РЕГИСТРАЦИЯ > АВТОМАТИЧЕСКИЙ ТЕСТ > АВТОМАТИЧЕСКОЕ РАЗВЕРТЫВАНИЕ
- Я проверяю свой код в своем репозитории (предпочтительный вариант, размещенный git, как github)
- тесты автоматически запускаются, и веб-сайт развертывается в моем приложении Heroku
- если тесты проходят, то сайт автоматически развернуто на моем производстве heroku app
- если тесты терпят неудачу, я хочу, чтобы меня как-то уведомили.
Как бы вы это сделали?
6 ответов
мы используем:целостность. Это довольно простое решение - он не будет делать все под солнцем, но его довольно легко настроить и обрабатывать наиболее распространенные случаи использования/функции. Это также довольно легко взломать, если вы хотите сделать больше.
целостность государства:
Heroku-это самый простой и быстрый способ развертывания целостности.
однако:
Примечание
Невозможно получить доступ к репозиториям по SSH на Heroku
это потому, что ваше приложение целостности потребуется ключ SSH. Это не невозможно, но определенно несколько кругов, чтобы перепрыгнуть. Вам нужно будет дать целостности закрытый ключ и поместить его в приложение, а затем взломать целостность, чтобы использовать этот ключ ssh, когда он инициирует git clone
.
из перечисленных вами вещей автоматическое развертывание, вероятно, является тем, чего большинство людей не ожидали бы от своего сервера CI (и целостность не предоставляется из коробки). Вам нужно будет настроить git для использования этого ssh-ключа и инициировать git push
из правильного места (из репозитория).
к сожалению, я не знаю подробностей того, как это сделать-мы фактически запускаем целостность на VPS.
CircleCi предлагает именно то, что вам нужно. Мы запустим ваши тесты на каждом толчке, развернем их, если они пройдут (в Heroku или с помощью Capistrano/Fabric/anything really), и отправим вам уведомления, если они потерпят неудачу.
в предисловии я один из основателей Codeship (https://codeship.io), который является сервисом, который поддерживает именно это.
но больше по теме, в основном есть 2 разных способа, которые я думаю, что это может быть реализовано (пожалуйста, имейте в виду, что все имена ветвей, которые я использую, произвольны и могут быть названы совершенно разными):
постановка / производство за один раз
всякий раз, когда вы нажимаете на свой мастер или конкретную ветку развертывания, вы запускаете свои тесты и если все они проходят первое развертывание в промежуточном приложении, запустите отдельные тесты (Selenium или sauce labs отлично подходит для этого), и если это сработает, включая миграции, которые вы нажимаете на свое производственное приложение.
Это здорово, так как последняя версия всегда доступна в производство и мы используем этот цикл в течение длительного времени. Работает для нас. Недостатком является то, что толчок к постановке приложения heroku занимает некоторое время. Если вы хотите запустить миграции для копии ваших производственных данных, это это займет еще больше времени. Это не вечность, но это займет пару минут.
постановка / производство как отдельные шаги
У вас могут быть отдельные промежуточные/производственные ветви, которые развертываются в соответствующих приложениях heroku. Это имеет преимущество быть более быстро и вы можете контролировать когда выпустить некоторые части. Особенно для приложений, где вы хотите получить внешнюю обратную связь перед развертыванием в производство, это отлично работает.
мы поддерживаем все это в Railsonfire, но в настоящее время мы работаем над новой версией нашего сервиса, которая намного лучше. Мы очень хорошо интегрируемся с Heroku, поэтому вам не нужно думать об этом (но у вас все еще есть возможность сделать это самостоятельно любым способом)
есть много инструментов на рынке, которые делают это. SnapCI предложения развертывание трубопроводов это позволяет вам протолкнуть каждую фиксацию через тесты, а затем в промежуточную и производственную как разные этапы конвейера развертывания. Мы также имеем полную поддержку для распараллеливания теста, ветвей здания и тяг-запросов.
Ну, есть Hudson, который предоставляет плагин git, а также поддержку сценариев. Остальные конфигурации, я думаю.
Хадсон:http://hudson.dev.java.net