NOTAS
- Debes estar unido a la red privada Tailscale de Sperantus para poder hacer un release.
- Consulta en Cómo configurar variables de entorno para mis contenedores la manera de tener valores distintos para staging y producción para las mismas variables de entorno.
- Es buena idea hacer un script que automatice este proceso para tu proyecto según tus necesidades. Bajo
hosting/encontrarás el archivohosting/sample_build_push.shque es un ejemplo de un proceso de build multi-plataforma.
-
Prueba tus cambios. Con el método de build local de docker que tengas prueba que todo esté como esperas antes de construir las imágenes y hacer commit.
-
Haz commit y push de tus cambios.
git add ...archivos a agregar al commit...
git commit -m "Agregada funcionalidad ... etc"
git push -
Asigna la versión del relase. Actualiza el valor de la variable
PROJECT_RELEASE_VERSIONdel archivohosting/deploy_env/project.envIMPORTANTE: esta versión debe ser nueva cada vez. No está permitido sobreescribir versiones existentes que ya fueron empujadas al respositorio central.
-
Indica en el control de versiones la versión definida:
git commit -m "Actualizado project.env" git -a X.Y.Z tag -m "Release versión X.Y.Z" git push origin X.Y.Z -
Autentifícate contra el registry docker. Necesitarás estar autentificado para poder empujar imágenes al repositorio central de donde se toman para levantarse los contenedores en la infraestructura.
______________________________________________________________________________
NOTA: Cuando uses el comando que se menciona abajo, o cualquier otro que interactúe con la infraestructura de Sperantus, y no te hayas autentificado se te preguntará por tu password y también por el código 2FA generado por la autentificación de dos factores (que registraste con el QR que se te envió la primera vez que se creó tu cuenta para proyectos de Sperantus Hosting). El prompt será parecido a lo siguiente:Autentificación contra Sperantus Vault requerida.
------- Método de autentificación: 'userpass' Usuario: 'tu_usuario' ------- Password (will be hidden): <TU PASSWORD> Initiating Interactive MFA Validation... Enter the passphrase for methodID "17324ed1-47eb-9129-095f-d46d7e5284b2" of type "totp": <EL CÓDIGO GENERADO POR TU APLICACIÓN 2FA>______________________________________________________________________________
Para autentificarte con el repositorio central de imágnees docker del proyecto ejecuta el comando "docker_login" de la aplicación "hosting". Desde la raíz de tu proyecto:hosting/hosting docker_loginEste comando te indicará un comando que debes ejecutar en tu máquina (que inicia con
docker login --username AWS --password 'TEXTO LARGO....'), esto con el fin de que se generen las credenciales de docker y puedas empujar imágenes al repositorio central (ya que no es posible para la utilidad de hosting hacerlo por ti).
Cuando ejecutes el comando que se te indicó debe terminar con el texto "Login Succeeded". Por ejemplo:mi-proyecto$ docker login --username AWS --password 'blablablablabla' '084828560446.dkr.ecr.us-west-2.amazonaws.com'
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded -
Construye las imágenes docker de tu proyecto. Construye la o las imágenes de tu proyecto según el proceso propio del mismo.
TIP: corre el comandohosting docker_images_namingpara que te muestre el nombre que debe tener cada imagen.
IMPORTANTE: Si el proyecto usa arquitectura Arm64
(PROJECT_CPU_ARCH=ARM64en el archivoproject.env) debes construir imágenes compatibles con dicha arquitectura y construir las imágenes con 'provenance' desactivado. Más detalles: Cómo construir imágenes docker para la arquitectura Arm64
Durante el build, taguea las imágenes construidas con el repositorio e id del proyecto usando la nomenclatura084828560446.dkr.ecr.us-west-2.amazonaws.com/[PROJECT CODE]:[NOMBRE CONTENEDOR]-[VERSION].
Donde-
084828560446.dkr.ecr.us-west-2.amazonaws.comsiempre es el mismo valor (indica la cuenta AWS donde está el repositorio). -
[PROJECT CODE]debe ser el código del proyecto. -
: (dos puntos)Indica que lo que sigue es el tag. En estos proyectos el tag está compuesto por el nombre del contenedor, guión y la versión. -
[NOMBRE CONTENEDOR]el nombre del contenedor (httpd, backend, etc) -
- (guión)El guión es usado en vez de dos puntos porque desde el punto del registry el nombre del contenedor + la versión será el "tag" de docker debido a que, por simplicidad, se usa un solo registry de imagen para todas las imágenes del proyecto. -
[VERSION]la versión en formato vX.Y.Z siguiendo los lineamientos de Semantic Versioning
Por ejemplo, para el proyecto
daleks_victory, el contenedorhttpdy si se asignó a PROJECT_RELEASE_VERSION el valor 1.0.0 entonces el comando sería:docker tag moby-dangling@sha256:XYZ 084828560446.dkr.ecr.us-west-2.amazonaws.com/daleks_victory:httpd-1.0.0
-
-
Si no lo hiciste durante el build, empuja las imágenes al registry:
docker push 084828560446.dkr.ecr.us-west-2.amazonaws.com/[PROJECT CODE]/[NOMBRE CONTENEDOR]-[VERSION]Por ejemplo:
NOTA: Si la versión ya existe se responderá con un error HTTP 400 un error de HTTP 403 indica que no estás autentificado al registry docker.docker push 084828560446.dkr.ecr.us-west-2.amazonaws.com/daleks-app/httpd-v1.0.0
- Una vez subidas las imágenes, realiza el deployment:
hosting/hosting aws_deploy_web <AMBIENTE>Donde
AMBIENTEdepende de la configuración que quieras desplegar:stagingoproduction. La configuración de dichos ambientes se toma dehosting/deploy_env/staging.envyhosting/deploy_env/production.envrespectivamente. -
Esto realizará el despliegue a producción de las nuevas imágenes, mostrándote el progreso del mismo. En caso de que haya algún error se te indicará claramente.