Implementar nuestro propio software usando Puppet?

8

(Disculpas de antemano por la estupidez en esta pregunta. Normalmente soy un programador, no un administrador de sistemas, pero me he encargado de automatizar algunas cosas y limpiar otras cosas que están automatizadas pero no de la manera más bonita . :-)

He estado buscando varias herramientas para la automatización de la implementación de software en un montón de servidores, como cfengine, Puppet y Chef. Hasta ahora, Puppet se ve más atractivo, pero ciertamente aún no me he comprometido con nada.

Parece que todas estas herramientas pueden hacer un gran trabajo al mantener un montón de servidores actualizados con software preempaquetado .

Lo que no entiendo es: ¿cómo se usa una herramienta (como Puppet) para administrar las implementaciones de nuestro propio software interno? Creo que estoy perdido porque he visto miles de tutoriales que muestran cómo mantener Apache ensure => latest(que es bastante bueno), pero nada que se corresponda con mi caso de uso hoy, que es algo más como:

  1. cuando un ser humano presiona el botón,
  2. extraiga la rama A del repositorio de control de versiones B
  3. ejecuta el comando C para compilarlo
  4. copie los binarios D a los servidores E1 a E10
  5. en cada servidor, ejecute el comando F para que todos los cambios surtan efecto

Puppet suena muy bien, y veo totalmente la ventaja de la configuración declarativa e idempotente sobre algunos scripts de shell, pero no he visto ningún tutorial para "desea actualizar sus scripts de shell a Puppet (o Chef, o cfengine) así que esto es lo que usted debería hacer". ¿Hay tal cosa? ¿Es obvio para otras personas cómo tomar las cosas provistas en los documentos de Puppet y replicar el comportamiento que quiero? ¿No lo estoy entendiendo?

Lo que me parece, hasta ahora, es que el ser humano (n. ° 1) empaquetaría manualmente el software (n. ° 2 y n. ° 3) externo a Puppet, actualizaría manualmente la configuración de Puppet, lo que provocaría que Puppet actualizara los servidores. .. ¿tal vez? (Estoy un poco confundido aquí, como estoy seguro de que puedes decir).

¡Gracias!

Conocer
fuente
Puppet está diseñado para funcionar con el patrón "Paquetes, archivos, servicios". Puppet sería genial para preparar sus servidores, pero un servidor de compilación continuo como Jenkins podría ser una mejor herramienta para este caso de uso.
Spuder

Respuestas:

5

Usamos Puppet, pero no lo usamos para nuestras implementaciones de aplicaciones. Como dijiste, puedes empaquetar tu software en debs o rpms, configurar tu repositorio privado en todas partes y usar Puppet para controlar las versiones, pero aún estás a merced de esperar la próxima actualización de 30 minutos en todos tus servidores.

Lo que haría (y esto está cerca de lo que hacemos, pero usamos rieles para que no haya un paso de compilación):

  • Use Puppet para configurar todo en el servidor, excepto la aplicación misma. Dependencias, servidores web, usuarios, rutas, etc.
  • Haga que su servidor de compilación automatizado (bambú, hudson, control de crucero, etc.) coloque los artefactos compilados en un administrador de repositorio como Nexus.
  • Utilice capistrano para impulsar la compilación a sus servidores

Chef podría tener más capacidades de empuje en tiempo real; No estoy muy familiarizado con eso.

Ben Jencks
fuente
Este software en particular no está usando Ruby. Tengo la impresión de que Puppet es bastante agnóstico, pero que Capistrano está diseñado para funcionar mejor con las aplicaciones Rails. Pero han pasado un par de años desde que usé la gorra, así que tal vez ha cambiado, y lo revisaré nuevamente ahora.
Ken
1
Capistrano se inclina hacia Rails, pero es flexible y se puede usar fácilmente para otros idiomas. Simplemente lea las recetas de implementación predeterminadas y sobrescríbalas en su propia receta. Es solo programación. Mi empresa implementa docenas de aplicaciones PHP en un puñado de servidores a través de Capistrano, aunque utilizamos el frontend de Webistrano para hacerlo más manejable.
Martijn Heemels
2
Capistrano está bien, pero MCollective y RunDeck están mejor ajustados para integrarse con Puppet.
jgoldschrafe
También puedes echar un vistazo a Fabric; Es un poco como Capistrano, pero en Python.
Xiong Chiamiov
1

Los pasos 1 a 3 suelen automatizarse en un proceso de compilación. Normalmente, la salida de este proceso pasará por un ciclo de prueba. Empaquete la salida para que pueda implementarse en un entorno de prueba de integración. Solo si se pasan las pruebas de integración, se deben realizar los pasos 4 y 5.

Su paso 5 implica una interrupción del despliegue. Para algo como apache, esto se puede manejar apagando y reiniciando durante la rotación del registro. Un script crontab puede manejar esto. Si puede manejar los cambios continuos durante un período de una hora más o menos, simplemente incluya el reinicio en el paso de implementación 4. Puppet o cfengine son herramientas apropiadas para el paso 4. Esto se puede activar actualizando el repositorio cuando pasan las pruebas de integración.

BillThor
fuente
1

Busque recetas de títeres y encontrará toneladas de guiones listos para producción. Sí, tendría que empaquetar el software manualmente. Si mantiene su propio repositorio personal, puede usar el indicador de = = último indicador. Luego escribe una receta para decirle a Puppet que instale el software. La receta debería colocarse en el servidor maestro desde donde se propagaría a los esclavos.

Sameer
fuente