Creo que en la actualidad está ya claro que debemos tener un repositorio para versionar el código de nuestra aplicación. Algunos también versionan en ese mismo repositorio la configuración de la aplicación. Para algunos casos esto puede ser suficiente, pero en contextos de entrega continua no me parece apropiado.
En primer lugar la configuración y el código tienen un tasa de cambio distinta, el código cambia mucho más rápido que la configuración. Al mismo tiempo la configuración suele variar dependiendo del ambiente en que se despliegue la aplicación. Finalmente, dependendiendo de la organización puede que la configuración del ambiente productivo sea reservada y sólo algunos miembros de la organización puedan accederla. La propuesta entonces es tener un repositorio exclusivo para almacenar la configuración de la aplicación. En particular, yo suelo crear en ese repositorio un branch por cada ambiente. Adicionalmente para facilitar el trabajo del equipo de desarrollo suelo almacenar junto al código, la configuración del ambiente desarrollo.
Finalmente necesitamos un tercer repositorio para almacenar los scripts de despliegue. La idea de poner estos scripts en un repositorio exclusivo tiene que ver otra vez con su tasa de cambio esporádica y también con el hecho de que es posible que estos scripts sean creados/manipulados por personas distintas a las que escriben el código, típicamente sysadmins.
En algunos casos particulares puede que sea necesario un cuarto repositorio, por ejemplo si uno quisiera generar modulos Puppet para automatizar el provisioning de la aplicación.
Pensándolo bien, creo que el título del artículo no es preciso, el principio es versionar todo, el hecho de usar 3 repositorios es más bien una forma de implementarlo, que puede no aplicar siempre.
Pablo, muchas gracias por compartir. La calidad de los post que hacés (por lo menos los que leí) es muy alta, y de un nivel que cuesta encontrar facilmente en español (por lo menos me cuesta a mi).
Gracias pero no soy Pablo, con lo cual me surge la duda si te referias a mi (y simplemente te equivocas de nombre) o si en realidad el comentario era para otro blog/autor. 😉
Jajaja era a vos. Perdón! En mi defensa puedo alegar cansancio. Te re-bauticé 🙂
Te conocí cuando viniste al Agile Open Space en la Universidad Católica de Montevideo (2014), diste una charla sobre CI si mal no recuerdo, mostrando Jenkins como la herramienta. Desde ahí busqué y encontré tu blog.
Lo dicho, muy buen material. Especialmente lo referido a CI, CD y CR.
Saludos!