Cómo realizar un seguimiento de los cambios en los files de configuration para el entorno de desarrollo y producción

Estoy desarrollando una aplicación que usa JBoss, PostgreSQL, etc …

JBoss requiere una gran cantidad de configuraciones diferentes, como fonts de datos, serveres de correo electrónico, security, etc. ¿Cómo debo manejar estas configuraciones? ¿Debería someterse todo el JBoss a un VCS?

¿O es esto algo que tendrá que configurar para cada server de producción que tenga, y luego usar algunas imágenes de virtualización para el desarrollo?

Bueno, almacenar JBoss completo en VCS no es una opción en absoluto. Es principalmente algo binary y el tamaño de las configuraciones es mucho menor que el tamaño de los JAR. Esos JAR nunca cambiarán. NO coloque JBoss (o cualquier otra distribución binaria) en VCS.

Veo un par de forms de resolver el problema.

Primero, puede almacenar solo las configuraciones que necesita en Git. Esa es la solución más básica y no muy flexible. Puedes, por ejemplo, hacer enlaces simbólicos en las configuraciones de git repo en el server real, pero solo está disponible cuando el server tiene esos repos. En mi práctica, nunca había visto una distribución de server semejante.

O puede almacenar las configuraciones en git y tener una herramienta que las actualice en entornos reales. Una vez, en mi práctica, tenemos ese set de scripts basados ​​en Perl. Es muy simple y tienes control total, pero no no estandarizado. Es como devise una bicicleta.

Como mencionó en su pregunta, puede usar imágenes de VM para lograr esto. Eso es bueno si tiene actualizaciones poco frecuentes, ya que la reinstallation de toda la VM puede ser dolorosa cada vez que actualice la configuration. Además, ¿qué tal cómo actualizarías esas imágenes? ¿Puede su server de CI crear una image? Eso es muy complicado, ¿eh?

La dirección que personalmente searchía es usar herramientas como chef , marioneta o ansible . Es muy similar al enfoque de image de máquina virtual, pero en su lugar se instala un cliente en cada máquina que "escucha" las actualizaciones de las configuraciones y toma las acciones requeridas. Además, es una herramienta muy conocida, con una gran comunidad, por lo que encontrar ayuda o apoyo es fácil. De todos modos, puede resultarle útil almacenar las configuraciones de muestra directamente en la base de código principal para los desarrolladores que quieran usarlas en su propia máquina sin esas herramientas instaladas.