cómo crear automáticamente un subdominio para cada solicitud de extracción

9

Antecedentes

Tengo un equipo de control de calidad no técnico que tiene que hacer pruebas en aplicaciones iOS / Android para cada solicitud de extracción (PR) que crea mi equipo de back-end.

Pregunta

Esto es lo que quiero hacer: cada vez que un ingeniero de back-end crea un PR en bitbucket, me gustaría que un script implemente automáticamente el código de esa rama PR git en un subdominio de nuestro servidor de desarrollo que coincida con el problema JIRA creado.

Por ejemplo, suponga que el problema de jira de que las direcciones de PR es BAC-421, luego, tan pronto como el ingeniero crea un PR, el script implementa el código que creó en AWS EC2 para que el QA pueda apuntar sus aplicaciones a www.bac421.mydevdomain. com

¿Cuál es la mejor manera de hacer esto? Soy una nube técnica devops.

Actualización - Especificaciones del entorno

así que aquí hay una ruptura de nuestro entorno: el backend usa laravel 5.3, se implementa en AWS EC2, usamos forge para la implementación automática (nada lujoso ... solo ejecutamos este script:

cd /home/forge/default
git fetch --tags 
git pull origin master
git describe
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
echo "" | sudo -S service php7.1-fpm reload

if [ -f artisan ]
then
    php artisan migrate --force
    php artisan config:cache
    php artisan queue:restart
fi

que ejecutamos tan pronto como fusionamos el desarrollo con la rama maestra), además de que no usamos ninguna herramienta de CI / CD, aunque estoy abierto a recomendaciones: el proveedor de DNS es GoDaddy, nuestro servidor de aplicaciones es nginx, nuestra base de datos está en un instancia RDS separada

abbood
fuente
1
¿Cómo implementa actualmente su software? ¿Qué herramientas de CI o CD utilizas? ¿Quién es tu proveedor de DNS?
usuario2640621
Si. Hay muchas formas de proteger este gato, incluidas, entre otras, la actualización de un archivo de hosts, pero necesitaríamos saber más sobre su entorno.
James Shewey
respuesta actualizada @ user2640621
abbood

Respuestas:

3

Hacemos esto en el trabajo.

Tenemos un servidor pequeño, llamémoslo receptor, es el objetivo de los eventos de webhook de GitHub . Ejecuta una pequeña aplicación que analiza la carga útil e incorpora lógica sobre cómo proceder, por ejemplo, crear un nuevo servidor en el proveedor de infraestructura, actualizar el equilibrador de carga, implementar en un servidor existente, destruir el servidor, etc. Esta podría ser una aplicación web tradicional que sirve hasta una API o podría ser una aplicación sin servidor, depende de usted cómo desea abordarla.

El receptor es relativamente sencillo de manejar, los otros sistemas de soporte necesarios que necesitará son un enfoque para la administración / aprovisionamiento de la configuración (cómo tiene el servidor los paquetes necesarios para ejecutar la aplicación), administración de secretos (cómo accede el servidor a información confidencial) y enrutamiento (cómo se actualizan los subdominios y cómo se dirigen al servidor correcto)

Podría valer la pena considerar la preparación de una AMI con los servicios necesarios configurados, una plantilla de CloudFormation con la lógica de aprovisionamiento de infraestructura y CodeDeploy podría manejar las implementaciones por usted.

Gestión de la configuración

Esto realmente depende de usted y su equipo, hay una gran cantidad de herramientas que puede usar o simplemente puede confiar en las secuencias de comandos de shell. En qué punto del ciclo de vida de los servidores aplicas los cambios es lo que se discute en el artículo de diseño de AMI que vinculé.

Manejo de secretos

Este es un tema difícil de abordar con la información disponible, en aras de la brevedad, lo dejaré a usted y a su equipo.

Enrutamiento

Hay algunas formas en que puede manejar el enrutamiento, el Application Load Balancer (que no debe confundirse con el ELB / NLB) ofrecido por AWS admite el enrutamiento basado en host . Alternativamente, podría usar un proxy inverso como NGINX o HAProxy, cuando aprovisione un nuevo entorno necesitará actualizar este enrutamiento (idealmente automáticamente) independientemente de qué enfoque adopte.

No olvide considerar cómo manejará la base de datos / la capa de persistencia y las implementaciones de tiempo de inactividad cero. La pregunta que debe hacerse con la capa de persistencia es si el equipo compartirá una base de datos y cómo interactuará con cosas como las migraciones. Sobre el tema de las implementaciones de tiempo de inactividad cero, CodeDeploy debería manejarlo bien por usted. Una cosa más, mencionó una sola aplicación móvil que apunta a diferentes entornos, ¿cómo apuntará estas aplicaciones a los entornos?

dom_hutton
fuente
Hay mucho jugo en tu respuesta. ¿Puedes desglosarlo un poco? Por ejemplo, en las diferentes secciones que mencionaste ... ¿puedes darme algo para comenzar en cada una de ellas?
Abbood
¿Existe alguna relación entre el usuario que publicó esta respuesta y este usuario ? Apuesto a que son del mismo "usuario" ... Si es así, fusionen ambas cuentas ...
Pierre.Vriens
1

esta configuración funcionó perfectamente para mí usando el despliegue de código aws:

ingrese la descripción de la imagen aquí

abbood
fuente