Plataforma CI/CD corporativa DevSecOps

Contenido

Plataforma CI/CD corporativa

Una plataforma de integración continua (CI) y entrega continua (CD) es un conjunto de herramientas y procesos utilizados para automatizar las distintas etapas del ciclo de vida de un proyecto software, tales como compilación, pruebas, despliegue, etc. Esto permite a los desarrolladores detectar y corregir errores y problemas de forma temprana en el ciclo de vida del desarrollo, mejorando la calidad del software y aumentando la eficiencia del equipo de desarrollo.

A continuación se muestra el esquema de  la Plataforma CI/CD con las herramientas y frameworks que la forman.

Si pincha en las herramientas y/o frameworks obtendrás más información.

Descarga código fuenteVerificación yconstrucciónde la imagenAnálisis dedependenciasUmbral de CalidadAnálisis estáticode códigoPruebasunitariasInicialización yconfiguración deCadenaUnicaCompilación yconstrucciónartefactos>Pippeline CI: CadenaUnicaPlataforma CI/CD corporativa v1.1(Pulsa en las herramientas/framework para más información)Pre-Cloud (OpenShift)Motor de CIReposotorio de códigoReposotorio de códigoReposotorio de artefactosMotod de CD (Cass)Registro de imágenes

Para más información consultar:

A continuación se enumeran las principales herramientas utilizadas en el proceso de CI/CD en la Plataforma Pre-Cloud y sus enlaces.

Componentes de la Plataforma CI/CD corporativa

Repositorio de código corporativo horizontal

El repositorio de código es el lugar donde se custodiará y se versionará el código fuente del software desarrollado. Está basado en GitLab, que es una plataforma de código abierto para el control de versiones y la gestión de proyectos de desarrollo. Ofrece características como repositorio de código, seguimiento de errores, integración continua y despliegue, gestión de tareas, almacenamiento de documentos y colaboración en equipo. Es compatible con Git, el sistema de control de versiones más popular, y se puede utilizar tanto en instalaciones locales como en la nube. GitLab es ampliamente utilizado en la industria para colaborar y automatizar procesos de desarrollo de software.

Todo componente software desarrollado estará ubicado en el repositorio de código GitLab. Se tiene que utilizar dentro de RCJA, si se utiliza desde fuera será necesario conexión vía VPN.

Para más información consultar:

Repositorio de artefactos corporativo horizontal

El repositorio de artefactos es el lugar donde se custodiarán y se distribuirán los binarios del software construido. Adicionalmente, contendrá y podrá distribuir todo el software de terceros necesario para la construcción de proyectos software. Está basado en Jfrog Artifactory, que es un sistema de almacenamiento y gestión de paquetes de código abierto. Sirve como un repositorio central para almacenar y compartir paquetes de software, incluyendo artefactos de construcción de aplicaciones, librerías y dependencias. Además, permite la integración con herramientas de automatización de construcción y despliegue, y proporciona características de seguridad y cumplimiento. Artifactory es ampliamente utilizado en la industria para simplificar el proceso de distribución y actualización de paquetes de software, y para mejorar la colaboración en equipos de desarrollo.

Todos los componentes construidos y necesarios para la construcción de otros componentes, estarán ubicados en el repositorio de artefactos. Se tiene que utilizar dentro de RCJA, si se utiliza desde fuera será necesario conexión vía VPN.

Para más información consultar:

Motor de Integración Continua (Jenkins)

Como motor de integración continua se utiliza Jenkins. Jenkins es un sistema de automatización de construcción y despliegue de código abierto.

Se utiliza para automatizar tareas comunes en el ciclo de vida de una aplicación de software, tales como la construcción, ejecución de pruebas (unitarias, de integración, de interfaz, etc.), generación de imágenes de contenedores y despliegue. Orquestará todo el proceso de integración y entrega continua. Jenkins es una plataforma ampliamente utilizada para la automatización, que puede ejecutarse en entornos Kubernetes mediante plugins como Jenkins Kubernetes Plugin, lo que le permite gestionar agentes dinámicos y aprovechar las capacidades del orquestador para la construcción y el despliegue de software.

Para más información consultar:

Análisis Estático de Código (SonarQube)

La herramienta SonarQube es la herramienta utilizada para analizar la calidad del código fuente de los sistemas de información, principalmente con tecnología Java que trabajan en integración continua. Este análisis se realiza dentro de una de las tareas del pipeline configurado en el motor de integración continua de la Plataforma CI/CD.

En S06 - Evaluación estática de código fuente del catálogo de servicios estándar según el modelo de calidad de la Agencia se define el servicio prestado por las Oficinas de Calidad para analizar la calidad del código fuente de los sistemas de información.

La implementación de este servicio por parte de la Oficina de Calidad de la Dirección General de Estrategia Digital se define en S06 - Evaluación estática de código fuente, en el cual se especifcan umbrales de calidad del código.

Registro de imágenes OCI (Quay)

Quay es la solución de RedHat para un registro de imágenes OCI, que permite almacenar y distribuir imágenes de contenedores.     
Ofrece características adicionales de seguridad y cumplimiento para garantizar la seguridad de las imágenes subidas al repositorio, como son:

  • Autenticación y autorización basado en roles: Quay proporciona un sistema de autenticación y autorización robusto para garantizar que solo las personas autorizadas tengan acceso a las imágenes presentes en el repositorio.
  • Escaneo de vulnerabilidades: Quay proporciona un sistema de escaneo de vulnerabilidades para detectar y alertar sobre problemas de seguridad en las imágenes presentes en el repositorio.
  • Integración con herramientas de cumplimiento: Quay se integra con herramientas de cumplimiento para ayudar a la organización a cumplir con normas y regulaciones específicas.
  • Integración con herramientas de automatización: Quay se integra con herramientas de automatización para lograr automatizar el proceso de construcción, implementación y gestión de imágenes.
  • Integración con OpenShift: Quay se integra con OpenShift para proporcionar una plataforma completa para el desarrollo, implementación y gestión de aplicaciones en contenedores.

Motor de Entrega Continua (ArgoCD)

ArgoCD es una herramienta de código abierto para la gestión de aplicaciones en Kubernetes. Es un sistema de entrega continua (CD) que ayuda a los equipos a automatizar el despliegue y a la actualización de aplicaciones en un cluster de Kubernetes. Algunas de las características clave de ArgoCD incluyen:

  • Sincronización en tiempo real: monitorea los repositorios de código y sincroniza automáticamente los cambios con el cluster de Kubernetes.
  • Control de versiones: permite a los equipos controlar las versiones de las aplicaciones desplegadas y revertir a versiones anteriores si es necesario.
  • Interfaz gráfica de usuario: tiene una interfaz gráfica de usuario que permite a los equipos ver el estado actual de las aplicaciones y realizar cambios en tiempo real.
  • Seguridad: proporciona características de seguridad para asegurar que solo los usuarios autorizados pueden realizar cambios en las aplicaciones.
  • Integración con Git: se integra con Git, lo que permite a los equipos automatizar el proceso de construcción y despliegue utilizando ramas y etiquetas de Git.

Para más información consultar:

Frameworks y herramientas adicionales

Pipeline integración continua (CI)

Un pipeline de integración continua es una práctica clave en el desarrollo de software que se utiliza para automatizar y simplificar el proceso de integración, pruebas y entrega de código a lo largo del ciclo de vida de desarrollo de una aplicación. El objetivo principal de un pipeline de integración continua es detectar y abordar problemas de manera temprana en el desarrollo de software, lo que mejora la calidad del código y acelera la entrega de software funcional y confiable. A continuación, se detallan algunos componentes adicionales con los que se interacciona y cómo funciona en general:

  • Control de Versiones: Un sistema de control de versiones, como Git, se utiliza para gestionar los cambios en el código fuente y colaborar de manera efectiva en un equipo de desarrollo.
  • Motor de Integración Continua: Se utiliza un motor de integración continua, como Jenkins,  GitLab CI/CD, o Tekton, que automatiza una serie de tareas relacionadas con el ciclo de vida de sofware (como construcción y pruebas).
  • Herramientas adicionales: Se utilizan herramientas adicionales (como SonarQube, DependencyTrack, etc), para realizar pruebas exhaustivas al software y obtener información de estado sobre la calidad del mismo, posibles vulnerabilidades identificadas en las dependencias utilizadas, etc.

Para más información consultar:

Verificación de dependencias (DependencyCheck)

DependencyCheck es una herramienta de análisis de seguridad que identifica vulnerabilidades conocidas en las dependencias de un proyecto. Escanea librerías y componentes utilizados en el proyecto, verificándolos contra bases de datos como la NVD (National Vulnerability Database) para detectar riesgos asociados a versiones desactualizadas o inseguras. Es compatible con múltiples lenguajes y gestores de dependencias como Maven, Gradle, npm, y más. DependencyCheck se está integrado en CadenaUnica, para analizar las dependencias del proyecto en cada ejecución.

Gestión de dependencias

Dependabot es una herramienta de automatización, que se integra con el Repositorio de código corporativo horizontal, que ayuda a mantener las dependencias de un proyecto actualizadas.

Para más información consultar:

Verificación imágenes OCI (Trivy)

Trivy es una herramienta de código abierto desarrollada por Aqua Security que permite detectar vulnerabilidades en imágenes de contenedor, archivos de configuración y repositorios de código. Trivy está integrado en CadenaUnica para validar que el fichero Dockerfile cumple con las buenas prácticas publicadas por Aqua Security.

Próxima versión de la Plataforma CI/CD

En la continua mejora de las herramientas y prácticas DevSecOps, la Oficina de Impulso DevSecOps está trabando en la implementación de una nueva versión de la plataforma:

Como mejoras más importantes se encuentran:

  • Pruebas de mutación de las pruebas unitarias
  • Validación del fichero dockerfile
  • Detección de secretos en el código fuente
  • Análisis de la imagen generada
  • Propuesta de actuación de las dependencias con la herramienta Dependabot
Índice