Configuración de Auto DevOps en GitLab con Kubernetes
Resumen
Habilitar Auto DevOps en GitLab sobre un clúster de Kubernetes acelera el paso de código a producción con seguridad, calidad y monitoreo integrados. Aquí verás, paso a paso, cómo activar la estrategia de Continuous Deployment, revisar el pipeline generado, exponer la app con nip.io, habilitar métricas y crear review apps por branch para validar cambios antes del merge.
¿Cómo habilitar Auto DevOps en GitLab CI/CD con Kubernetes?
Activar Auto DevOps centraliza buenas prácticas sin configurar todo a mano. Primero se verifica el clúster en Operations > Kubernetes y luego, en Settings > CI/CD, se expande Auto DevOps y se habilita. Se elige la estrategia de Continuous Deployment to Production para desplegar sin intervención manual tras un merge a master.
Pipeline inicial con fases de build y test.
En test se ejecutan: calidad de código, escaneo de contenedores, escaneo de dependencias, escaneo de licencias, análisis estático de seguridad y tests unitarios.
Regla clave: casi todos los jobs pueden fallar sin bloquear, excepto tests unitarios; si fallan, el pipeline se detiene.
El merge a master detona deploy directo a producción y luego se ejecutan pruebas de performance para obtener un baseline.
¿Qué estrategia de deployment conviene?
Si se necesita control humano antes de producción, se usa continuous delivery. Si se busca velocidad total, se prefiere continuous deployment para que el pipeline llegue hasta producción automáticamente.
¿Cómo exponer la app con dominio?
En Operations > Kubernetes se añade el dominio usando IP.nip.io. nip.io actúa como proxy para mapear IPs a dominios cuando no hay dominio base. Con dominio propio, se configura un wildcard DNS apuntando a la IP generada por Ingress y se guardan cambios.
¿Qué aporta el pipeline de seguridad, calidad y monitoreo?
Con Auto DevOps, aparecen nuevas vistas y métricas útiles para mantener la salud del producto y el cumplimiento de políticas.
En el tab de Security se verifican hallazgos del pipeline.
En Licenses se listan licencias detectadas para luego definir cuáles son aceptables.
En Operations > Environments se ve el ambiente de producción, el conteo de “instancias” (pods) y accesos rápidos.
Acceso 1 clic a la URL publicada vía nip.io.
Monitoreo integrado: requests por segundo, tasa de errores, latencia y métricas de sistema como CPU cores y memoria. Se observan picos al visitar la app, ideales para validar comportamiento bajo carga.
¿Qué pruebas de seguridad corren?
Además del análisis estático, en ambientes publicados se añaden pruebas de performance y, más adelante en review apps, pruebas dinámicas de seguridad (DAST) tratando la app como black box.
¿Cómo crear review apps por branch con merge requests?
Las review apps despliegan un ambiente por cada branch, de modo que cada cambio se prueba en un entorno similar a producción.
Se crea un issue (ejemplo: Modificar aplicación) y desde ahí un merge request para generar el branch.
Se clona el repositorio, se crea el branch, se modifican vistas y tests para alinear resultados, y se hace push para detonar el pipeline.
El pipeline de branch cambia la etapa final: en vez de producción, despliega a review.
En review apps se ejecutan pruebas de performance y DAST.
Al cerrar el issue, se ejecuta el cleanup que elimina el ambiente de review.
¿Qué cambios de ejemplo se realizan?
Ajuste del título de la app: de “Express” a “Platzi”.
Actualización de tests para esperar “welcome to Platzi”, evitando fallos.
Verificación del pipeline en CI/CD > Pipelines.
¿Qué comandos de Git se usan?
# Clonar el repositoriogit clone <URL-del-repo>cd<carpeta-del-repo># Crear y cambiar al branch (ejemplo con espacios entre comillas)git checkout -b '1 modificar aplicación'# Verificar cambiosgit status
# Añadir, commitear y subir cambiosgitadd.git commit -m "modify title"git push -u origin '1 modificar aplicación'
El valor de este flujo es enorme: levantar un pipeline con build, calidad, seguridad, deploy, monitoreo y review apps solía requerir conocimiento avanzado de infraestructura y desarrollo. Con Auto DevOps se logra en minutos, quedando listo para iterar con responsabilidad y velocidad.
¿Te gustaría compartir cómo aplicarás estos pipelines en tus proyectos y qué tipos de aplicaciones se beneficiarán más? Deja tus ideas en los comentarios y conversemos sobre tus próximos pasos.
Lastimosamente en los proyectos que he implementado el proceso DevSecOps no son proyectos públicos ni tienen una suscripción Gold en Gtilab por lo que toca hacer todas las implementaciones desde cero. Recomiendo usar herramientas (gratuitas) como:
Análisis de dependencias: OWASP Depedency Check
SAST: ShiftLeft Scan, Sonarcloud
DAST: OWASP ZAP
Análisis de infraestructura de contenedores: Clair
Performance: JMeter
Pruebas funcionales automatizadas: Cypress
estas me han funcionado muy bien para tecnologías JAVA, NetCore y Angular.
Ahora es una opción premium así que ya no lo genera :/ . Helm también fue retirado. Muy desactualizado el curso.
Para los que esten utilizando AWS y tengan problemas en colocar el "Base Domain":
Asumiendo que tienen un dominio llamado "midominio.com": En Route53 crear una entrada de tipo CNAME apuntando a la dirección que devolvió Ingress. Ej.: *.eks.midominio.com
Colocar "eks.midominio.com" como el base domain.
En el caso de tener todo una ambiente por rama, como es el caso de las bases de datos donde para probar cierto feature debo tener alguna data pre poblada en la base de datos, se puede en algún lado pre establecer un set de datos o como se maneja?
yo sugeriria tener un sistema de mocks en tu aplicacion y un comando para ejecutar y asi poder hacer seed a la base de datos, entonces en tu pipeline corres ese comando antes de tus pruebas
Existen herramientas de automatización de esas configuraciones, conozco en java liquibase, pero para node debe existir una similar.
Básicamente allí pones datos iniciales y estructura inicial de tu base de datos, que se puede ejecutar como un job de tu proceso de integración continua.
No me quedo muy claro cómo donde quedo la especificación del pipeline si no tenemos un .gitlab-ci.yml en este proyecto.
Buena pregunta, alguien podría responderla por favor?
Si nos damos cuenta la construccion del pipeline de autodevops empieza en build y continua con otras tareas de kubernets, pero para tener el build usamos el .gitlab-ci.yml que vimos en las clases anteriores
Llevo ya algunos dias intentando pasar de aca. En mi pipeline hay un job "dast_environment_deploy" que no me permite avanzar.
Tengo estas lineas, que quizas alguien pueda guiarme, al generarme el error.
Error: release: not found
NoPostgreSQL helm values file found at '.gitlab/auto-deploy-postgres-values.yaml'Release"dast-default-postgresql" does not exist.Installing it now.Error: release dast-default-postgresql failed, and has been uninstalled due to atomic being set: timed out waiting for the condition
¿Me podrían recomendar cual es el mejor Curso de la plataforma para introducirme en kubernetes sabiendo que ya tengo experiencia con docker, linux y desarrollo web? Gracias.
Se puede aplicar en cualquier proyecto, desde un basico, hasta uno empresarial
Yo imagino un sistema ERP basado en la nube donde los upgrades de funcionalidad y la reparación de eventuales bugs pueda realizarse rápidamente.
Considero e imagino que este tipo de metodología, buenas prácticas, habilidades, etc, en la actualidad son mucho muy utilizadas en el ámbito de desarrollo del aplicaciones móviles, puesto que cada pipeline que se realice después de todo el proceso de actualización, atención de issues, tests, QA, entre otros elementos, el deploy a producción lo asocio a una actualización de la app hacia el usuario. Es increible todo lo que en la actualidad la industria de tecnología puede hacer. Saludos desde México. Si estoy diciendo algo incorrecto por favor les agradeceré me corrigieran para seguir aprendiendo.
En mi caso queremos implementar DevOps dentro de la empresa para corregir y prevenir problemas y agilizar las entregas por lo que nos viene bien para todos los proyectos activos que tenemos
Tengo una aplicación con las siguientes caracteristicas
backend php
fronted con framework extjs no compilado, servido en estado plano
login que redirecciona a la pagina de la aplicación
De igual manera es viable integrarla con autodevops?
Si tienes tu aplicación corriendo en kubernetes si es posible que lo utilices. Si no primero debes dockerizar tu aplicación y luego si poderla desplegar en kubernetes.
Para cambios de infraestructura, networking vlans, vpn ,provisioning de VM con VMware, y una app que estoy desarrollando personalmente.
Bueno la curiosidad me mata, pero creo que se puede hacer, si estoy utlizando VMware con varias VM, podria hacer un cluster de kubertes para conectarlo directo a este ambiente, aunque la integracion con Gitlab no va a hacer nada facil :)
Buena clase! pero tengo una duda, es posible que a traves de autodevops pueda modificar y/o realizar steps dentro de algún archivo de configuración como el gitlab-ci.yml ?
En el caso de seguir el enfoque TDD (Test Driven Development) lo correcto habría sido modificar primero el Test y luego la implementación.
es posible habilitar autodevops usando como mi cluster swarm?
No entiendo muy bien de donde sacaron el pipeline? podrian explicarme por favor
Esto podría funcionar con aplicaciones Microsoft .NET - IIS o es mejor usar Azure Autodevops?
Para el contenido del curso yo te recomiendo usar Azure Autodevops
Por lo visto en el curso, el ambiente de gitlab se adapta muy bien al desarrollo de aplicaciones web pero, se podría implementar el ciclo completo de devops en el desarrollo de aplicaciones de escritorio implementadas con C++ y que son distribuidas mediante instaladores a los clientes?
Desde mi punto de vista, soy alumno, creo que el uso de GIT es fundamental. GITLAB claramente tiene muchas funcionalidades pensadas para desarrollo web, sin embargo GIT (cualquiera sea) creo que es indispensable para cualquier proyecto que se trabaje con equipos de desarrollo.
¿Que consideraciones hay que tener cuando el proyecto debe consumir una DB? Los cambios que se hacen se disparan a staging. Deberia tener configurada la DB para que stagin la consuma o deberia haber alguna otra consideración adicional?
Esta es de las cosas que se responde con el típico "depende de las necesidades del cliente".
Pero lo que si te recomiendo es que tu base de datos debe de estar lo más normalizada posible para que tus queries puedan ser más limpias y rápidas de efectuar