2021-12-16

CI/CD Enviroment

Vista general de un sistema de integración y despliegue continuo. Herramientas involucradas desde que el código llega al repositorio, hasta que se despliega en el entorno.

CI-CD

En las últimas semanas he estado explorando algunas tecnologías que ya había utilizado como desarrollador, pero desde un enfoque distinto. Se trata de todo el stack necesario para convertir un commit en un despliegue en un determinado entorno.

He escogido un conjunto de tecnologías cuyo uso está bastante generalizado, aunque seguro que para algunas de ellas hay otras opciones. Hablo de las siguientes herramientas:

  • Open LDAP
  • Jenkins
  • Nexus
  • Sonarqube
  • Cucumber y otros frameworks de testing
  • Kubernetes
  • Docker y Docker Compose

En este caso, quería explorar como era la administración y la configuración de dichas herramientas.

Despliegue de las herramientas

El despliegue de las herramientas involucradas en el proceso se ha llevado a cabo a través de Docker Compose. A través de este fichero, puedo levantar todo el stack sin muchas complicaciones.

version: "3.9"
services:
  jenkins:
    image: "jenkins:jcasc"
    ports:
      - "50000:50000"
    env_file:
      - ./jenkins.env
    volumes:
      - ./j_casc.yaml:/casc.yaml
    networks:
      - dv_tools
  openldap:
    image: bitnami/openldap:2.5
    volumes:
      - "..."
  sonarqube:
    image: "sonarqube:version"
  nexus:
    image: "nexus:version"
networks:
  dv_tools:
    driver: bridge

volumes:
  openldap_data:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: './openldap_data'

Los despliegues resultantes del proceso se llevan a cabo en un Cluster de kubernetes, en el cual, además, se ejecutan los agentes de Jenkins cuando se dispara un proceso en el nodo controlador.

Organización del despliegue de las herramientas

Es importante tener en cuenta que este despliegue es una simplificación de las arquitecturas que se suele emplear en muchas ocasiones. Normalmente dispondremos de varios entornos de pruebas en los que desplegaremos nuestro software antes de llegar al entorno de producción. Además, es probable que para algunos de los servicios dispongamos de un Cluster propio en los que se ejecutarán dichos procesos.

Workflow

Las herramientas que empleamos están especializadas en el desarrollo de tareas muy concretas. Todas ellas se complementan para establecer mecanismos de control que permitan llevar el software a los correspondientes entornos de una forma segura y automatizada.

En el siguiente diagrama se explica cómo el Software llega desde la máquina del desarrollador al entorno donde se desea desplegar el software (en este caso un Cluster de Kubernetes).

Workflow

En la Pipeline que ejecuta el agente de Jenkins se realizan diversos controles de calidad. Además de ejecutar los tests desarrollados, se lleva a cabo un análisis del código y de la cobertura del mismo haciendo uso de Sonarqube.

El artefacto generado se sube al correspondiente repositorio en Nexus, y el despliegue en Kubernetes es gestionado mediante Ansible.

Autenticación y autorización

Queda una pieza por nombrar: El servidor LDAP. A través de este servidor se lleva a cabo la gestión de los usuarios y los permisos. De esta forma, disponemos de una sola fuente de información centralizada. Yo he utilizado OpenLDAP, aunque existen otras muchas opciones para implementar el servidor LDAP, como ApacheDS.

TL;DR

  • Sistema de CI/CD.
  • En el proceso intervienen múltiples herramientas especializadas.
  • El código se analiza, y para llevar a cabo el despliegue debe superar unos controles de calidad.
  • La gestión de los usuarios y los permisos se centralizan en un único punto.

More like this