todo lo que debes saber sobre CI/CD

 

El codigo no existe en silo (aislado), nuestros servicios pasa por diversas fases antes de llegar a la manos de nuestros consumidores/clientes, hay multiples herramientas por donde nuestro codigo debe pasar, muchas manos humanas que tocara el codigo antes de poder desplegarlo en un ambiente productivo, todo esto no debe ser traumatico, asi que vamos a ver esos tip importantes que te ayudaran a ti y a tu codigo a llegar a su distino.

¿Que es CI/CD?

debemos comenzar por el inicio, definiendo que es que cada cosa, CI o continuous integration es el proceso de automatizar la union o “integracion” de cada pedazo de software, para construirlo y luego validar si la construiccion a sido ejecutada correctamente, uando hablamos de construccion de sotfware (build) nos referimos a la agrupacion de dependencias, con el codigo fuente y traduccirlo a lenguaje maquina o a un lenguaje que se pueda interpretar, es decir

para lenguaje compilado

El build es igual a compilar que no es mas que pasar a lenguaje maquina.

para lenguaje interpretado

El build solo es agrupar las biblioteca de funciones y el codigo fuente y transforma para que pueda ser leido por el interpretador final.

Para que el CI sea efectivo y muy facil de implementar, se necesita una herramienta como base de este proceso, una aplicacion llamada “version control system” o sistema de control de versiones para seguir y controlar los cambios al codigo fuente.

quiero que imagines el siguiente escenario, imagina un proyecto con 5 desarrolladores y cada uno debe desarrollar cosas sobre ese mismo codigo, se necesita que todos esten trabajando uno al lado del otro al mismo tiempo, al final del dia tratar de agrupar todo los cambios de forma manual seria literal “un caos”, para esto, estan los sistema control de versiones.

sistemas control de versiones

en el mercado hay muchas herramientas que permite tener control de codigo, una de las mas usadas es git, esta herramienta te permite guardar tu codigo en infinidades de repositorios remoto, y acceder a ellas cuando desees y compartir con quien desees , dominar tu herramienta de control de versiones es algo importantisimo,

tuitea los siguente para que te veas interesante

Todos los involucrado en el desarrollo de una app DEBE dominar la herramienta de control de versiones no solo el engargado de despliegue.

La meta al implementar CI

la meta de implementar integracion continua es muy facil de decir: tener un objeto que se puede transportar y ejecutar en un ambiente

este objeto normalmente lo llamamos artefacto y puede ser un ejecutable,o un conjunto de archivos ordenados y listos para ser ejecutados o una imagen de docker; lo importante aqui es tener mapeado que version tenemos, obviamente a la ultima complilacion seria la ultima version pero esta version quedara obsoleta en el mismo momento en que se haga otro proceso de integracion continua y se genere otro artefacto; por esto necesitamos ponerle un numero de version a todos nuestros artefacto.

eso me lleva al siguiente punto de tres ideas importante

1 tus artefactos debe estar versionados y debes poder distinguir que tiene cada version haciendo un mach con tu repositorio de codigo es decir debe tener la facilidad de saber que caracteristicas tiene cada artefacto asociandolo con tu herramienta de control de versiones ejemplo imagina que tiene un artefacto con numero de version 20 y esta asociado al commit anterior;

tu debes poder encontrar esta relacion con facilidad para tomar decisiones si el codigo del commit actual a fallado y debes hacer rollback o si deseas hacer una prueba del codigo mas estable antes del ultimo commit en otro ambiente.

2 la integracion debe ser continua y automatica

aun que paresca obvio, no lo es, en escencia un pipeline de integracion continua deberia ser automatico pero que significa esto? deberia ser disparado automaticamente cuando alguien del equipo a subido un cambio al repositorio y todo los demas desarrolladores deberia ser notificado de este nuevo cambio para luego unirlo a sus repositorios locales cuando se verifique que el codigo esta correcto.

es importante que sea algo continuo y sin parar algo que sea “siempre” tu integracion debe ser siempre, la idea es que cada caracteristicas nueva este lo mas antes posible lista para ser probada.

3 tu CI no solo deberia solo integrar codigo tiene que ir mas alla

hasta ahora te he comentado que el CI solo tiene un proposito y si es su proposito principal es decir; construir un artefacto es importante, pero no deberia ser lo unico que haga tu pipeline tenemos que ir mas alla

como podemos ir mas alla

tu integracion debe hacer pruebas sobre el codigo, y que clase de pruebas te preguntaras, de todo lo que puedas. debes asegurar la calidad, debes implemenar lo minimo necesario para asegurar la calidad, y en el mercado hay de todo, asi que deberias hacer la tarea he investigar que se adapta a tu codigo y a tu sotfware

te ayudo un poco dandote algunos adelantos para que sepas que investigar

unit Testing

dependency scanning

Container Scanning

SAST - Static Application Security Testing

DAST - Dynamic Application Security Testing

IAST - Interactive Application Security Testing

Análisis de dependencias: OWASP Dependency Check

Análisis estático de seguridad: Shift Left Scan

Análisis de infraestructura de contenedores: Clair

Análisis dinámico de seguridad: OWASP ZAP

Comentarios

Entradas populares de este blog

AWS SAM y AWS Lambda docker Container Image tutorial con PYTHON USANDO A...

Solucion: Docker Error: No such container:

Los unicas 4 herramientas que necesitas para volverte un master en Devops