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.sh
que 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.
-
Asigna la versión del relase. Dependiendo si quieres actualizar
staging
oproduction
, actualiza el valor de la variablePROJECT_RELEASE_VERSION
del archivohosting/deploy_env/production.env
ohosting/deploy_env/staging.env
con la versión que asignarás al release.IMPORTANTE: 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. Asegúrate de haber hecho
commit
,push
y tag de versión de tus cambios (ocasionaría un problema potencialmente grave al proyecto que una versión desplegada oculte cambios no controlados por el control de versiones):git commit -m "Cambiado XYZ" git tag <VERSION> git push --tags
-
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_login
Este 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_naming
para que te muestre el nombre que debe tener cada imagen.
IMPORTANTE: Si el proyecto usa arquitectura Arm64
(PROJECT_CPU_ARCH=ARM64
en 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.com
siempre 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 contenedorhttpd
y 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
AMBIENTE
depende de la configuración que quieras desplegar:staging
oproduction
. La configuración de dichos ambientes se toma dehosting/deploy_env/staging.env
yhosting/deploy_env/production.env
respectivamente. -
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.