Tras ya unos cuantos años caminando por el mundo de la Tecnología y, sobretodo, batallando con todo tipo de roles y personas; he querido escribir estos “Mandamientos” para que todo empresa, más bien startups, tengan claros sus objetivos de automatización y despliegue de componentes y/o aplicaciones. Aquí podéis encontrar 4 mandamientos que, tras unos cuantos años, pues he recopilado y hoy compartodo con vosotros.
Primero de todo, debemos tener claro nuestros objetivos/estrategia para asumir un sistema de despliegue de aplicaciones basado en CI/CD. Aquí va una propuesta:
Objetivo: Debemos permitir a los equipos de desarrollo el poder crear nuevos servicios y desplegarlos en producción en menos de un día de trabajo.
Cómo podemos hacerlo?. La estrategia se divide en 4 fases, aunque naturalmente podemos ampliarlas según nuestro modelo de maduración y ajustarla a nuestras necesidades, pero, podríamos decir que son:
- Fase 1: Configuración básica de CI/CD. Seremos capaces de desplegar cualquier aplicación (nueva o no) desde un repositorio en git al mergear la pertinente branch. Automáticamente y sin intervención humana.
- Fase 2: CI/CD para servicios nuevos. Seremos capaces de crear un nuevo servicio, sin intervención humana y utilizando ChatOps o parecidos (Slack). Nuestras aplicaciones crearán el repo en git con una aplicación esqueleto, un registro en Docker y se configurará todo lo necesario para que el código se despliegue cuando se haga el pertinente merge. (Opcional: que el mismo servicio cree un dashboard de monitorización, por ejemplo en Prometheus, donde los desarrolladores puedan agregar/modificar métricas).
- Fase 3: Migrar servicio viejos a los nuevos clusters. Migraremos todos nuestros servicios a estos nuevos clusters. Dockerizando todo nuestro código, configurando todos los repos para que se desplieguen automáticamente y destruyendo nuestra Legacy infraestructure. En esta fase ya deberemos tener nuestra monitorización correctamente configurada y automatizada.
- Fase 4: Refinar nuestros recursos. Configuraremos todos nuestros servicios para que éstos puedan utilizar el mínimo de recursos posibles, optimizando memória, CPU, etc… para que éstos puedan ofrecer la mejor perfomance a nuestras aplicaciones.