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.
Para más información consultar:
- Plataforma CI/CD corporativa (Recursos/Activos)
- Norma de uso de la plataforma de integración y entrega continua de corporativa (Recursos/Reglas y pautas - Normas)
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 código corporativo horizontal (Recursos/Activos)
- Norma de uso del repositorio de código corporativo horizontal (Recursos/Reglas y pautas - Normas)
- Cómo trabajar con el repositorio de código corporativo horizontal (Recursos/Reglas y pautas - Guía)
- Cómo se gestionan los permisos en el repositorio de código corporativo horizontal (Recursos/Reglas y pautas - Guía)
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:
- Repositorio de artefactos corporativo horizontal (Recursos/Activos)
- Norma de gestión del repositorio de artefactos corporativo horizontal (Recursos/Reglas y pautas - Normas)
- Cómo trabajar con el repositorio de artefactos corporativo horizontal (Recursos/Reglas y pautas - Guía)
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:
- Motor de integración continua de la Plataforma CI/CD corporativa (Recursos/Activos)
- Norma de uso del motor de integración continua de la plataforma CI/CD corporativa (Recursos/Reglas y pautas - Normas)
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:
- Motor de entrega continua CaaS de la Plataforma CI/CD corporativa (Recursos/Activos)
- Norma de uso del motor de entrega continua CaaS de la plataforma CI/CD corporativa (Recursos/Reglas y pautas - Normas)
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:
- Pipeline de integración continua (Recursos/Activos)
- Norma de uso del pipeline de integración continua de la Plataforma CI/CD corporativa (Recursos/Reglas y pautas - Normas)
Pruebas de Mutación
Las pruebas de mutación son una técnica avanzada para evaluar la calidad de las pruebas unitarias mediante la introducción automática de pequeñas modificaciones (mutaciones) en el código fuente. El objetivo es comprobar si las pruebas existentes son lo suficientemente robustas como para detectar estos cambios.
Si las pruebas no fallan ante una mutación (es decir, el test sigue pasando), es posible que no estén cubriendo adecuadamente el código, esto puede indicar una debilidad en la cobertura o en la lógica de los tests.
En la plataforma de CI/CD se utilizan herramientas específicas que automatizan este proceso. Los que se han implementado actualmente son:
- PIT (Pitest): Es una herramienta de mutation testing orientada a proyectos Java. PIT analiza el bytecode de la aplicación, genera mutantes aplicando transformaciones comunes (como reemplazo de operadores, inversión de condiciones, etc.) y ejecuta los tests para verificar si los cambios son detectados. Ofrece una integración sencilla con Maven y Gradle, y proporciona reportes visuales que muestran qué mutaciones han sido detectadas y cuáles han sobrevivido.
- Stryker: Es una herramienta de mutation testing diseñada para entornos JavaScript y Node.js. Stryker analiza el código fuente y aplica mutaciones adaptadas a la sintaxis y semántica de JavaScript/TypeScript, como el cambio de operadores lógicos o la eliminación de condiciones. Integra con frameworks de pruebas como Jest, Mocha y Jasmine, y ofrece una interfaz web interactiva para analizar los resultados.
Estas herramientas permiten ir más allá de la cobertura tradicional, ayudando a garantizar que las pruebas realmente validen el comportamiento del código y no simplemente lo ejecuten.
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.
Dependency-Track
Dependency-Track es una plataforma de análisis y gestión de vulnerabilidades diseñada para monitorizar y rastrear las dependencias de software a lo largo de su ciclo de vida. Permite identificar, evaluar y priorizar riesgos de seguridad asociados a las dependencias, utilizando bases de datos como la NVD (National Vulnerability Database) y otras fuentes de inteligencia de vulnerabilidades.
A diferencia de herramientas que solo escanean en el momento, Dependency-Track mantiene una monitorización continua, alertando sobre nuevas vulnerabilidades en dependencias existentes. Ofrece integración con sistemas CI/CD, generación de reportes, y soporte para estándares como SBOM (Software Bill of Materials).
Prevención de revelación de secretos (GitLeaks)
En el desarrollo de software, es común manejar información sensible como claves de acceso, tokens de autenticación, contraseñas o configuraciones privadas. Esta información, conocida como secretos, no debe incluirse en el repositorio de código corporativo, ya que su exposición representa un riesgo de seguridad significativo.
Los errores humanos o fallos de configuración pueden provocar que estos secretos terminen inadvertidamente en el historial de un repositorio, incluso si luego se eliminan. Para mitigar este riesgo, se utilizan herramientas de detección de secretos que analizan el contenido del repositorio en busca de posibles filtraciones.
Para controlar los secretos en la plataforma CI/CD se hace uso de la siguiente herramienta Gitleaks.
Gitleaks es una herramienta de código abierto diseñada para detectar información sensible expuesta en repositorios de Git. Escanea el historial de commits, ramas y archivos en busca de secretos, como claves API, credenciales, tokens de acceso y contraseñas, que podrían haberse filtrado accidentalmente. GitLeaks es altamente configurable y está integrada en CadenaUnica para prevenir la exposición de datos sensibles de forma automática. Es una solución efectiva para fortalecer la seguridad en proyectos de desarrollo y evitar brechas de seguridad relacionadas con la gestión de secretos.
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.
- Dockerfile
- Alineación con buenas prácticas (uso de ADD en lugar de COPY)
- Uso de latest en la imagen base (no recomendado)
- Exposición de puertos inseguros
- Uso de permisos elevados (USER root)
- Imagen generada
- Vulnerabilidades en paquetes del sistema (Debian, Ubuntu, Alpine, etc.)
- Vulnerabilidades en dependencias de aplicaciones (Python, Node.js, Java, etc.)
- Problemas de configuración en la imagen.
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:
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:
- Integración en Cadenaunica un pipeline de entrega continua para gestionar los cambios en bases de datos de forma automática dentro del flujo de CI/CD.