¿Elastic Beanstalk es adecuado para CD de grado empresarial?

11

Estoy trabajando con un proyecto que está utilizando Jenkins para construir e implementar microservicios en Elastic Beanstalk. Implementamos una rama de integración en un entorno de prueba, lanzamos ramas en un entorno intermedio y luego una compilación maestra final para producción. Tengo un par de preocupaciones al hacerlo de esta manera: primero, significa que terminamos con una matriz de una construcción por proyecto por entorno, duplicando esfuerzos; y dos, significa que no estamos implementando los mismos artefactos de construcción para la producción que se validaron en la puesta en escena.

Me inclino a abandonar Beanstalk y pasar a ASG simples usando algo como Chef para implementaciones. Eso nos dejaría con una construcción por proyecto, produciendo un artefacto de construcción, y podríamos implementar el mismo artefacto en la producción que se aprobó en la puesta en escena. Sin embargo, la transición tiene un costo inicial no insignificante. ¿Hay alguna forma de usar Beanstalk mejor que permita un CI / CD más confiable y más fácil de administrar?

Nota : Promover el mismo artefacto de compilación es exactamente lo que quiero hacer, pero de los documentos no veo ninguna forma clara de hacerlo; explica cómo implementar en EB desde el origen de su aplicación, pero no cómo promocionar una versión existente a otro entorno, a menos que logré desplazarme más allá. Si está disponible en EB en sí, puede haber una limitación en el complemento de implementación EB de Jenkins que impide que se haga específicamente en Jenkins, pero no he visto una manera de hacerlo.

Adrian
fuente
¿Es su entorno Jenkins el que plantea la restricción de compilación única por entorno? Utilizo Elastic Beanstalk para implementar aplicaciones y los artefactos de aplicaciones cargados pueden promocionarse (implementarse) en múltiples entornos perfectamente. Entonces, realmente no veo las limitaciones que está describiendo. Parece que puede haber una manera de utilizar Elastic Beanstalk para hacer lo que quiera. Pero esta pregunta es bastante amplia en la actualidad.
Andy Shinn
¿Por qué está reconstruyendo sus activos en lugar de promover el mismo activo a otros entornos después de las pruebas?
Evgeny

Respuestas:

4

En mi opinión, tu problema no es con Elastic Beanstalk en ese escenario, es con Jenkins, o al menos la forma en que lo estás usando. Realmente deberías concentrarte en construir "una cosa" solo una vez, independientemente de qué sea esa cosa.

Divulgación completa: trabajo para ThoughtWorks y estoy increíblemente predispuesto a GoCD. Trataré de explicar lo que quiero decir en lo más neutral posible. Usaré los documentos de nuestra herramienta como ejemplos, pero espero que las personas puedan extrapolar a sus sistemas.

En algún lugar temprano en su tubería está construyendo "artefactos". Puede tratarse de archivos binarios que representan la totalidad o parte de su aplicación, o pueden salir de cualquier cantidad de herramientas, como herramientas de prueba. El sistema debe almacenar estos artefactos y nunca volver a construirlos. El sistema debe buscar el artefacto de la revisión adecuada cuando sea necesario.

Por ejemplo...

  1. Construyo un archivo .jar y ejecuto algunas pruebas unitarias en él, cosas básicas de C / I. Si pasa, ese archivo .jar y la salida de las pruebas se cargan en ese trabajo de canalización específico .
  2. El próximo canal podría ser su implementación en un entorno de prueba más complejo. Se debe buscar la exacta frasco de la exacta trabajo que lo construyó. Luego ejecuta Elastic Beanstalk para implementar ese jar en el entorno correcto.
  3. La siguiente tubería es su implementación provisional. No hace falta toda la parte posterior paso a la primera tubería y va a buscar la exacta frasco de la exacta trabajo que lo construyó. Luego ejecute Elastic Beanstalk para implementar ese jar en el entorno correcto.

Estas son tuberías separadas porque eso le permite ejecutar más en paralelo o bajo demanda sin bloquear.

Puede utilizar Elastic Beanstalk, Chef, Puppet, Ansible, uDeploy o cualquier otra herramienta para realizar las implementaciones reales. Ese no es el origen de su problema. Los servidores de integración continua no se crearon originalmente para hacer esto. Por supuesto, hay muchos complementos que puede usar para llegar al mismo lugar si así lo prefiere.

Los servidores de entrega continua como GoCD , Chef Automate y ConcourseCI se crearon específicamente para resolver cosas como esta.

Ken Mugrage
fuente
Sí, mi objetivo es construir una vez y promover a la producción. Mi pregunta es si beanstalk es adecuado para este tipo de uso. Por lo que puedo decir, realmente no parece ser; Por ejemplo, el método recomendado para implementar una aplicación .NET es hacerlo desde Visual Studio, que es la peor práctica que se me ocurre.
Adrian
No lo he usado personalmente, pero parece que sería si cambias la palabra "promover" a "desplegar". Sus sistemas de CD llaman a beanstalk para implementarlo en las pruebas, ejecuta algunas pruebas y luego informa de éxito / falla. Si tiene éxito, su sistema de CD llama a beanstalk para implementarlo en la preparación, y así sucesivamente. Entonces, la promoción la realiza su herramienta de orquestación, la implementación la realiza su herramienta de implementación. (Para su información, esta es la razón por la cual compañías como Chef tienen Hibernate (la cosa), Automatizan (promueven la cosa) y Chef (implementan la cosa).
Ken Mugrage
Para su información, parece que podría escribir un script (la infraestructura como código es "algo bueno") docs.aws.amazon.com/elasticbeanstalk/latest/dg/… , pero de nuevo, absolutamente 0 experiencia personal.
Ken Mugrage
No importa qué palabra uses, beanstalk no parece hacerlo, por lo que puedo decir. Parece estar orientado al despliegue desde la fuente, no desde artefactos. Desde la página que ha vinculado: "Cuando ejecuta eb deploy, la CLI de EB agrupa los contenidos del directorio de su proyecto y lo implementa en su entorno". Agradezco la respuesta, pero mi pregunta es específica para beanstalk, así que espero que alguien que tenga experiencia en beanstalk pueda intervenir.
Adrian
Ah, perdón por eso. Estaba interpretando ~/eb$ eb deploy Creating application version archive "app-150630_014338". Uploading elastic-beanstalk-example/app-150630_014338.zip to S3que significa cualquier archivo zip que haya atascado en ese directorio. ¡Buena suerte!
Ken Mugrage