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.
Respuestas:
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...
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.
fuente
~/eb$ eb deploy Creating application version archive "app-150630_014338". Uploading elastic-beanstalk-example/app-150630_014338.zip to S3
que significa cualquier archivo zip que haya atascado en ese directorio. ¡Buena suerte!