Esta es una muy buena pregunta, ya que es un antipatrón común para unir ci/cd
herramientas con entornos.
Jenkins es una fábrica de construcción. Como tal, debe ser totalmente independiente de la noción de medio ambiente, o incluso la entrega.
La mejor práctica es tener algún tipo de proceso de puesta en escena y / o interfaz (si puede permitírselo: un software de entrega dedicado).
Proceso de estadificación
Debe intentar crear algún tipo de trabajos de preparación para cada entorno, en el que definirá la configuración del entorno y empaquetará el paquete final con él.
A continuación, tendrá trabajos de entrega para cada entorno.
Herramientas de entrega
Para ello crear las tareas de almacenamiento intermedio y entrega, puede utilizar herramientas muy básicas de scripting, como shell
, pero hay herramientas de scripting más adaptados, como Ansible
, puppet
, chef
...
Si puede pagar el gasto, puede considerar invertir en un software de implementación (mencionaré algunos con los que trabajé en la sección de comentarios).
Tenga en cuenta que esos softwares gestionan algún tipo de proceso de organización del entorno.
Obviamente, tiene mucho sentido combinar softwares de implementación y secuencias de comandos.
Más allá de la segregación de herramientas y entorno.
Dado que solicitó las mejores prácticas, me parece que vale la pena mencionar otro antipatrón que se encuentra comúnmente: el acoplamiento de herramientas SCM y el proceso de entrega.
Es una muy buena práctica almacenar la configuración del entorno (no contraseñas o información confidencial, por supuesto) y activar scripts en vivo en herramientas SCM (como svn
o git
...). Sin embargo, es una práctica muy mala verificar la configuración del entorno e iniciar scripts en vivo DURANTE el lanzamiento en vivo. Puede que simplemente no esté disponible cuando lo necesite.
Esta fase de salida debería ser parte del proceso de preparación que mencioné antes.
Idem potence
Otra mejor práctica es que sus scripts deberían ser idem-potent
: esto significa que debería poder reproducir sus scripts una vez para realizar la puesta en escena y la entrega. Entonces debería poder reproducirlos una y otra vez, y no cambiarían el estado de su sistema a menos que haya algo bloqueado en la configuración.
Escalada
Como una mejor práctica final que compartiré de la experiencia directa es escalar Jenkins: diferentes equipos tienen diferentes necesidades y usos de Jenkins. Cuando muchos equipos comparten un Jenkins común, puede haber problemas con los recursos. El peor de los casos es cuando un equipo requiere reiniciar el maestro Jenkins mientras otro necesita entregarlo.
Lo ideal sería tener un Jenkins por equipo o por grupo de equipos que compartan la misma meta y planificación de entrega.