¿Qué proporcionan las herramientas SCM (Ansible, Puppet, Chef, etc.)?

8

He leído bastante sobre la gestión de la configuración de software (en Internet y también SWEBOK), pero no tengo claro cuál es el propósito de las herramientas SCM. O, mejor dicho, qué proporcionan estas herramientas que otras herramientas no brindan.

Digamos que tengo un entorno con las siguientes herramientas:

  • Jenkins para la integración continua.
  • Ant como herramienta de construcción.
  • Git como sistema de control de versiones.
  • GitLab para la gestión de repositorios Git, y también para el seguimiento de problemas.
  • Análisis de código fuente y herramientas de prueba, como Sonar y JUnit.

Entonces, mi pregunta es, ¿qué proporcionarían esas herramientas SCM? ¿De qué manera serían útiles?

Julen
fuente

Respuestas:

10

Todas las herramientas que ha mencionado (Jenkins, ant, git) ayudan a construir y probar su artefacto. En el mundo de Java, por lo general, esto puede ser guerra, oído o simplemente zip con la aplicación dentro. A veces, para aplicaciones complicadas, puede ser más de un artefacto. Para otras plataformas de programación puede variar, DLL, binarios para múltiples plataformas diferentes, etc.

Ahora supongamos que desea implementar su aplicación. Si tiene un servidor, puede hacerlo manualmente o con algún script de cosecha propia. Hasta aquí todo bien :)

Pero, ¿qué sucede si tiene muchas granjas (grupos de máquinas), diferentes granjas deben tener implementaciones con diferentes configuraciones (bases de datos, diferentes ubicaciones geográficas) ¿Qué sucede si su aplicación puede escalar horizontalmente de modo que agregar un par de nuevos nodos a la granja debería ser Una tarea trivial. Su equipo de control de calidad puede solicitar un nuevo entorno para ejecutar sus pruebas, su equipo de rendimiento puede solicitar un nuevo entorno o agregar nodos a la granja para ejecutar pruebas de estrés, etc. Ahora administrar todo esto parece ser complicado. Ahí es donde entran en juego herramientas como ansible, chef, sal, marionetas y otras.

En realidad, están ayudando a automatizar la implementación. Pueden proporcionar recetas de implementación, instalar dependencias faltantes (para ejecutar su proyecto puede requerir jre, tomcat de una versión específica y nginx para contenido estático). Todo esto a nivel de granja.

Sé que la respuesta es demasiado genérica y puede parecer menos obvia para el desarrollador de Java (soy uno de esos). Pero si tiene un equipo de muchachos de sistemas / desarrolladores, deben señalar inmediatamente los beneficios de estas herramientas.

Mark Bramnik
fuente
Gracias por tu respuesta. Para aquellos que son desarrolladores y probadores de control de calidad y rendimiento todo en uno (mi caso), con solo dos máquinas, desarrollo y producción, ¿recomendarían el uso de esas herramientas SCM? Entiendo su punto de vista, pero es difícil para mí comprenderlo y ubicarme en ese contexto, ya que nunca he estado en esa situación.
Julen
2
Si solo está desplegando una guerra, probablemente no debería usar estas herramientas. Por supuesto, puede probar uno (tal vez ansible o salt funcionará mejor para usted). Probablemente los probaría solo para aprender algo nuevo y ver si mi vida se hubiera vuelto más fácil con estas herramientas :)
Mark Bramnik
1
Creo que eso es lo que voy a hacer, muchas gracias.
Julen
En algún momento en el futuro, tendrá que escalar más allá de la capacidad actual o reemplazar el hardware existente con un kit más moderno. Ya sea que escale verticalmente (máquina más grande) u horizontalmente (separando la web de db con más de la web) usando un SCM, simplificará la migración final y facilitará la prueba de que no romperá nada en el movimiento. Decidir comenzar a experimentar ahora cuando su entorno es simple es una buena elección. Tenga en cuenta que también puede usar estas herramientas (prefiero Ansible por su simplicidad y falta de confianza en la instalación de agentes en cada caja) para aprovisionar su sistema Dev).
Bryan 'BJ' Hoffpauir Jr.