¿Desea implementar un nuevo código PHP y ejecutar el compositor en todas las instancias de AWS Beanstalk a través de Jenkins?

Soy nuevo en Jenkins, así que tengo una pregunta sobre el deployment. Mi sitio se ejecuta en Amazon Beanstalk a través de Docker (escalado automático). Actualmente hay 3 instancias en ejecución y mi aplicación PHP está en /var/www .

Lo que me gustaría hacer es hacer un git push (suponiendo que pasa la testing), quiero actualizar automáticamente cada instancia de EC2 en ejecución (iniciada por Beanstalk) con el nuevo código PHP y luego ejecutar la composer install en él.

En este momento, el command que veo que usan las personas en Jenkins para actualizar los serveres es algo así como rsync y luego ssh en el server para ejecutar la composer update .

Como no estoy creando las instancias (Beanstalk lo es), no sé las direcciones IP de mis instancias, así que no puedo poner eso en mi trabajo de Jenkins (como los tutoriales).

Así que mi pregunta es: ¿cómo pueden mis Jenkinks activar una actualización de código y la composer install en mis instancias en ejecución (y cualquier instancia recién creada) iniciadas por Amazon Beanstalk?

¿Cuál es la forma correcta de hacer esto?

Utilizo CodePipeline para hacer esto exactamente con mi aplicación Rails.

CodePipeline es un service gratuito que controla tus implementaciones y yo despliego y ejecuto comstackciones y testings usando solo git push .

Crea una canalización que use tu git repo como fuente. Luego, para la etapa de compilation en el proveedor de compilation, select "Agregar Jenkins", ingrese la URL del server y el nombre del proyecto. Luego, para Beta, select AWS ElasticBeanstalk como proveedor de implementación, select la aplicación y el entorno en los que desea que se deployment ElasticBeanstalk y esté configurado.

Lo que sucede es que le estás diciendo a CodePipeline que mire una twig específica de tu git repo para ver los cambios. Cuando nota cambios, quiere que ejecute la canalización. Cuando CP vea un cambio irá a github, tomará el código, buildá el package y marcará el package a través de la tubería. Para la etapa de construcción pasará el package a Jenkins y dejará que Jenkins lo haga. Cuando Jenkins envíe el post de éxito a CodePipeline, CodePipeline ejecutará el siguiente paso en la tubería. En este caso le está diciendo a CodePipeline que desea que invoque a ElasticBeanstalk para implementar su aplicación. Pasa el package a ElasticBeanstalk y dice "haz lo tuyo". Que EB hace

Así que ahora tenemos a Jenkins activando las actualizaciones de su código y ahora solo necesitamos ejecutar la composer install en todas las instancias, después de la implementación. Puede hacerlo creando un file .config en el directory .ebextensions. Creará un command de contenedor como este:

 #.ebextensions/composer.config container_commands: 01_first_line: command: cd /var/www 02_second_line command: composer install 

El command del contenedor se ejecutará después de que el server se haya levantado y después de que se haya extraído la versión de la aplicación, pero antes de que se implemente. Como Rubyista, no estoy seguro de si la composer install debe ejecutarse antes del deployment, después de la implementación o si no importa. Puede encontrar los documentos de AWS sobre la personalización del software Linux en su server aquí http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#linux-container-commands uno de los cuales será le permite ejecutar la composer install en el momento apropiado.