Integración continua adecuada y deployment continuo con Git y Heroku

Estoy desarrollando un website de ruby ​​on rails usando heroku y git.

¿Qué herramientas y características debo usar para configurar el siguiente process de desarrollo simple?

CÓDIGO> CHECK-IN> AUTO TEST> DESPLIEGUE AUTOMÁTICO

  • Compruebo mi código en mi repository (opción preferida, git alojado como github)
  • Las testings se ejecutan automáticamente Y el website se implementa en mi aplicación de reproducción heroku
  • Si pasan las testings, el website se implementa automáticamente en mi aplicación Heroku de producción
  • Si las testings fallan, quiero ser notificado de alguna manera.

¿Cómo harías esto?

Usamos Integridad . Es una solución bastante simple: no hará todo bajo el sol, pero es bastante fácil de configurar y maneja los casos / características de uso más comunes. También es bastante fácil piratear, si quieres que haga más.

Estados de integridad:

Heroku es la forma más fácil y rápida de desplegar Integrity.

Sin embargo:

NOTA
No es posible acceder a repositorys a través de SSH en Heroku

Esto se debe a que su aplicación Integrity necesitará una key SSH. No es imposible, pero definitivamente algunos aros para saltar. Tendrá que darle a Integrity una key privada y ponerla en la aplicación, y luego piratear Integrity para usar esa key ssh cuando inicie la git clone .

De las cosas que enumeró, la implementación automática es probablemente lo que la mayoría de la gente no esperaría que hiciera su server de CI (e Integrity no lo hace de fábrica). Tendrá que configurar git para usar esa key ssh e iniciar un git push desde la location correcta (el repository revisado).

Lamentablemente, no conozco los detalles de cómo hacer esto: en realidad ejecutamos Integrity en un VPS.

CircleCi ofrece exactamente lo que necesita. Ejecutaremos sus testings en cada inserción, desplegándolas si pasan (a Heroku o usando Capistrano / Fabric / cualquier cosa realmente), y le enviaremos notifications si fallan.

Como prefacio, soy uno de los fundadores de Codeship ( https://codeship.io ), que es un service que admite exactamente esto.

Pero más sobre el tema, básicamente hay 2 forms diferentes en las que creo que esto podría implementarse (tenga en count que todos los nombres de twigs que uso son arbitrarios y pueden denominarse totalmente diferentes):

puesta en escena / producción de una vez

Cada vez que presionas a tu maestra o a una twig de implementación específica ejecutas tus testings y si todas te pasan primero despliega a tu aplicación de ensayo, ejecuta testings por separado (Selenium o los laboratorios de salsa son ideales para eso) y si eso funciona, incluidas las migraciones, empujar a su aplicación de producción.

Esto es genial, ya que la última versión está siempre disponible en producción y utilizamos este ciclo desde hace mucho time. Funciona muy bien para nosotros La desventaja es que empujar a una aplicación heroku de preparación toma algo de time. Si desea ejecutar las migraciones contra una copy de sus datos de producción, esto lleva incluso más time. No es una eternidad, pero lleva un par de minutos.

puesta en escena / producción como pasos separados

Podría tener twigs de producción / etapas separadas que se implementan en las respectivas aplicaciones heroku. Esto tiene la ventaja de ser más rápido y puedes controlar cuándo liberar ciertas partes. Especialmente para las aplicaciones en las que desea retroalimentación externa antes de implementar en producción, esto funciona muy bien.

Apoyamos todo eso en Railsonfire, pero actualmente estamos trabajando en una nueva versión de nuestro service, que es mucho mejor. Nos integramos muy bien con Heroku, así que no tienes que pensar en eso (pero aún tienes la opción de hacerlo tú mismo de la manera que quieras)

Hay muchas herramientas en el mercado que hacen esto. SnapCI ofrece canalizaciones de deployment que le permiten pasar cada compromiso a través de testings y luego a etapas y producción en diferentes etapas de una canalización de implementación. También tenemos soporte completo para la paralelización de testings, creación de twigs y requestes de extracción.

Bueno, está Hudson, que proporciona un complemento de git, así como compatibilidad con scripts. El rest es configuration, supongo.

Hudson: http://hudson.dev.java.net

Prueba Heroku-Bartender . Un escrito aquí .