Lean Software (Webapplication) Release Engineering

Estoy buscando reorganizar la forma en que lanzamos nuestro software interno. Todo el código (webapps de PHP, algunas aplicaciones de Java y scripts de Perl) se comtesting en los repositorys de Subversion, pero no hay twigs o tags, todo se registra en el enlace troncal (solo alnetworkingedor de 1 – 3 desarrolladores por aplicación). En los serveres Linux de producción, el software se ejecuta directamente desde una copy svn activa (en realidad, la mayoría de los cambios también ocurren allí).

Como tenemos muchas aplicaciones pequeñas y lanzamos muy a menudo pequeños cambios en el sistema en ejecución, estoy buscando una manera muy delgada o transparente de hacer algo de ingeniería de lanzamiento y de limpiar este lío.

¿Hay alguna herramienta que pueda ayudarme a hacerlo en un entorno heterogéneo (en cuanto al lenguaje) de esa manera? ¿O alguien tiene una idea de cómo hacer esto de manera adecuada?

De lo contrario, pensé en escribir algunos scripts de lanzamiento (shell) que crean automáticamente tags de subversión desde el tronco y luego hacer un checkout de la label correspondiente en los serveres de producción. Pero eso también me suena como un hack'ish.

Gracias,

Haes.

La continuous integration es definitivamente el path a seguir, cualquier IC (incluso los files por lotes minimalists) es mejor que ninguno, pero solo será tan bueno como las políticas que tenga implementadas. Dado que sus files realmente no terminan como 'binarys' o 'distribuibles', marcar un lanzamiento puede requerir simplemente que marque el repository, o incluso esconder el número de revisión de Subversion en alguna parte. La política importante que necesita es que cualquier versión se pueda rebuild siempre que lo necesite, para que pueda comparar versiones actuales y anteriores, o volver a una versión anterior si algo sale mal. No se preocupe por la 'sobrecarga' de crear tags en svn, eso es muy eficiente.

Un script de lanzamiento que tenga la label de subversión suena bien. Una implementación de CI (recomendaría CruiseControl ya que es ideal para trabajos heterogéneos, aunque la heterogeneidad requiere un poco más de sobrecarga de configuration) es excelente, ya que puede pausar automáticamente el process en un logging de subversión y ejecutar testings automáticas que determinan si es bueno o no. suficiente para labelr o no.

Definitivamente no se implementaría automáticamente en un server de lanzamiento. Un 'área de preparación' (llámelo 'construcción nocturna', 'testing beta', lo que sea) sería mejor. Deje que sus usuarios se alejen de eso antes de decidir que es lo suficientemente bueno para implementarlo en los serveres de producción. Y, siempre que tenga la política en lugar de poder retrotraer a una versión anterior, habrá mitigado la posibilidad de un mal deployment.

La autocomprobación en los serveres de producción es la única parte "hackosa": una implementación automática de testing, testing, label y beta es lo suficientemente hábil. Sin embargo, el lanzamiento a la producción no debería tener un button fácil.

Usa tags y twigs; hacer que sea parte del ciclo de desarrollo. Cuando actualiza esa twig "stable-1.0", ha probado los cambios y la ha marcado "release-1.0.5", simplemente hace "svn switch" en el server a la nueva label. No funcionó, a pesar de haberlo probado? Cambia de nuevo, y descubre lo que está mal.

Pero cuidado, la ramificación en la subversión puede ser dolorosa, al less en la versión 1.5. Si usted o sus desarrolladores no tienen experiencia con las sucursales, espere un poco de molestias y / o errores al principio. Pero mientras haya cometido ningún código, debe perderse (en el peor, simplemente es difícil fusionarse).

Sus desarrolladores realmente deberían aprender cómo usar la ramificación; puede ser muy útil para una variedad de propósitos (no solo para la ingeniería de lanzamiento).

No cambie automáticamente el código en sus serveres de producción; alguien podría accidentalmente presionar el button equivocado. Las actualizaciones de producción siempre deben hacerse con cuidado. Los guiones para agregar nuevas tags son, en mi opinión, innecesarios debido a su simplicidad, pero su millaje puede variar.

Una última cosa, no permita que nadie tenga cambios en su server de producción. Puede causar conflictos, y esos tienden a tomar time para resolverse. Sin mencionar que destruye tu capacidad para reproducir un lanzamiento determinado en diferentes estaciones de trabajo (funciona bien aquí, ¿por qué no en el server? Hmm).

Algunos serveres de continuous integration hacen este tipo de cosas, Hudson , por ejemplo, tiene integración de subversión. Puede labelr, ejecutar testing e implementar por usted.

Usaría Hudson. además de search y labelr en svn (ref sblundy), puede ser útil en la administración de versiones con los complementos adecuados. por ejemplo, podría probar un complemento para "promocionar" las comstackciones que despliega en la producción y mantener una list de las comstackciones promocionadas y un logging de cambios / correcciones para las distintas versiones.