En este ejercicio, aprenderás a integrar pruebas automatizadas en un pipeline de CI/CD. Las pruebas automatizadas son esenciales para asegurar la calidad del software y detectar errores en etapas tempranas del desarrollo.

Objetivos del Ejercicio

  1. Configurar un entorno de pruebas automatizadas.
  2. Integrar las pruebas en un pipeline de CI/CD.
  3. Ejecutar y verificar los resultados de las pruebas.

Paso 1: Configuración del Entorno de Pruebas Automatizadas

Herramientas Necesarias

  • Jenkins: Para la automatización del pipeline.
  • JUnit: Para las pruebas unitarias en un proyecto Java.
  • Git: Para el control de versiones.

Estructura del Proyecto

Asegúrate de que tu proyecto tenga la siguiente estructura:

my-java-app/
├── src/
│   └── main/
│       └── java/
│           └── com/
│               └── example/
│                   └── App.java
├── src/
│   └── test/
│       └── java/
│           └── com/
│               └── example/
│                   └── AppTest.java
├── pom.xml
└── Jenkinsfile

Ejemplo de Código

App.java

package com.example;

public class App {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }

    public int add(int a, int b) {
        return a + b;
    }
}

AppTest.java

package com.example;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class AppTest {
    @Test
    public void testAdd() {
        App app = new App();
        assertEquals(5, app.add(2, 3));
    }
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-java-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

Paso 2: Integración de Pruebas en el Pipeline de CI/CD

Jenkinsfile

Crea un archivo Jenkinsfile en la raíz de tu proyecto con el siguiente contenido:

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
    }

    post {
        always {
            junit 'target/surefire-reports/*.xml'
        }
    }
}

Explicación del Jenkinsfile

  • agent any: Indica que el pipeline puede ejecutarse en cualquier agente disponible.
  • stages: Define las etapas del pipeline.
    • Build: Ejecuta el comando mvn clean package para compilar el proyecto.
    • Test: Ejecuta el comando mvn test para correr las pruebas unitarias.
  • post: Define acciones a realizar después de las etapas.
    • always: Siempre publica los resultados de las pruebas en formato JUnit.

Paso 3: Ejecutar y Verificar los Resultados

  1. Configurar Jenkins:

    • Asegúrate de tener Jenkins instalado y configurado.
    • Crea un nuevo proyecto en Jenkins y configura el repositorio Git donde se encuentra tu proyecto.
  2. Ejecutar el Pipeline:

    • Inicia la ejecución del pipeline desde la interfaz de Jenkins.
    • Observa las etapas de construcción y pruebas en tiempo real.
  3. Verificar Resultados:

    • Una vez completado el pipeline, verifica los resultados de las pruebas en la sección "Test Result" de Jenkins.
    • Asegúrate de que todas las pruebas hayan pasado.

Ejercicio Práctico

Tarea

  1. Modifica el método add en App.java para que falle una de las pruebas.
  2. Ejecuta el pipeline nuevamente y observa cómo Jenkins reporta el fallo en las pruebas.
  3. Corrige el método add y vuelve a ejecutar el pipeline para asegurarte de que todas las pruebas pasen.

Solución

Modificación en App.java para provocar un fallo

public int add(int a, int b) {
    return a + b + 1; // Error intencional
}

Corrección en App.java

public int add(int a, int b) {
    return a + b; // Corrección del error
}

Conclusión

En este ejercicio, has aprendido a configurar un entorno de pruebas automatizadas, integrar las pruebas en un pipeline de CI/CD y verificar los resultados. Las pruebas automatizadas son una parte crucial del proceso de CI/CD, ya que ayudan a mantener la calidad del software y a detectar errores de manera temprana.

Continúa con el siguiente ejercicio para aprender más sobre el despliegue en un entorno de producción.

© Copyright 2024. Todos los derechos reservados