0% encontró este documento útil (0 votos)
54 vistas54 páginas

Presentacio 04 Mod03

El Módulo 3 se centra en la integración continua y la automatización del proceso de construcción utilizando Jenkins, Git y Maven. Se abordan conceptos clave como la creación de pipelines, la configuración de jobs, y la importancia de los plugins para extender la funcionalidad de Jenkins. Además, se discuten estrategias de optimización, integración con sistemas de control de versiones y generación de informes y notificaciones.

Cargado por

dagmar.jaegger
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
54 vistas54 páginas

Presentacio 04 Mod03

El Módulo 3 se centra en la integración continua y la automatización del proceso de construcción utilizando Jenkins, Git y Maven. Se abordan conceptos clave como la creación de pipelines, la configuración de jobs, y la importancia de los plugins para extender la funcionalidad de Jenkins. Además, se discuten estrategias de optimización, integración con sistemas de control de versiones y generación de informes y notificaciones.

Cargado por

dagmar.jaegger
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Módulo 3: Integración continua

Automatización del proceso de construcción


MÓDULO 3

● Conceptos generales: Integración


continua
● Fundamentos de Git
● Fundamentos de Maven
● Automatización del proceso de
construcción
● Análisis estático de software
● Conceptos de DevSecOps
● GitHub Actions
● Workflows en GitHub Actions
Objetivos
Comprender los fundamentos de
Jenkins para la automatización del
proceso de construcción,
configuración de jobs, ejecución de
pipelines y su integración.
¿Por qué es
importante la
automatización de
procesos en DevOps?
Fundamentos y
primeros pasos
con Jenkins
¿Qué es Jenkins y para qué sirve?

📌 Jenkins es una herramienta de automatización de


código abierto que permite implementar prácticas de
integración y entrega continua (CI/CD).
Ayuda a los equipos de desarrollo a construir, probar y
desplegar software de manera automática y frecuente,
mejorando la calidad del producto y reduciendo el
tiempo de entrega.
¿Qué es Jenkins y para qué sirve?

✅ Funciones clave: 📜 Ejemplo de Jenkinsfile (pipeline


declarativo básico):
- Automatizar procesos de compilación, pipeline {

prueba y despliegue. agent any


stages {

- Integrarse con herramientas como Git,


stage('Build') {
steps {

Maven, Docker, SonarQube, entre otras.


echo 'Compilando proyecto...'
}

- Ejecutar pipelines de CI/CD definidos


}
stage('Test') {

como código.
steps {
echo 'Ejecutando pruebas...'
}
- Programar builds automáticos o }
stage('Deploy') {

desencadenados por eventos. steps {


echo 'Desplegando aplicación...'
}
}
}
}
Beneficios de Jenkins en la integración
continua
📌 Jenkins aporta beneficios clave para equipos de desarrollo que desean
adoptar integración continua, ya que permite detectar errores de forma
temprana, entregar software con mayor frecuencia y mantener procesos
estandarizados.
✅ Beneficios principales:
- Automatización de tareas repetitivas.
- Reducción de errores humanos.
- Mejora en la calidad del software.
- Integración con múltiples herramientas.
- Mayor visibilidad del estado de builds y entregas.
Comparación de Jenkins con otras
herramientas CI/CD
📌 Aunque Jenkins es una de las herramientas más populares para CI/CD,
existen otras opciones modernas como GitHub Actions, GitLab CI o CircleCI.
Cada una ofrece ventajas distintas según el contexto del proyecto.
Herramienta Características destacadas

Jenkins Flexible, con miles de plugins disponibles. Requiere configuración manual.

GitHub Actions Integrado en GitHub, fácil de usar. Ideal para proyectos ya en GitHub.

GitLab CI Integración completa con repositorios GitLab. Pipelines YAML.

CircleCI Rápida, buena integración con contenedores. Ideal para microservicios.


Instalación de Jenkins en distintos
entornos
📌 Jenkins puede instalarse de forma flexible en distintos entornos:
localmente, en servidores, en la nube o usando contenedores Docker. Esto
permite adaptarlo a distintas necesidades de equipos pequeños o grandes.
✅ Opciones comunes de instalación: 📜 Ejemplo (instalación rápida con Docker):
- Paquetes para Linux (.deb, .rpm) docker run -d -p 8080:8080 -p 50000:50000 --name
- Contenedores Docker jenkins \
- Instalador para Windows -v jenkins_home:/var/jenkins_home
- En la nube (AWS, Azure, GCP) jenkins/jenkins:lts
Configuración inicial y primeros pasos en
Jenkins
📌 Una vez instalado Jenkins, la configuración inicial incluye desbloquear el
sistema, instalar plugins recomendados y crear el usuario administrador.
Con eso ya puedes comenzar a crear jobs y automatizar flujos de trabajo.
✅ Pasos iniciales: 📜 Comando para obtener clave de acceso
inicial (Linux):
- Acceder a localhost:8080
- Desbloquear con contraseña del archivo sudo cat /var/lib/jenkins/secrets/initialAdminPassword
secrets/initialAdminPassword
- Instalar plugins sugeridos
- Crear cuenta de administrador
Configuración de usuarios, roles y
permisos
📌 Jenkins permite una configuración detallada de usuarios y roles para
mantener un entorno seguro y ordenado. Esto es útil en equipos grandes
donde cada usuario debe tener acceso a funciones específicas.
✅ Acciones clave: 📜 Script Groovy para crear un usuario:
- Activar seguridad en "Manage Jenkins" > import jenkins.model.*
"Configure Global Security" import hudson.security.*

- Usar plugin "Role-based Strategy" para def instance = Jenkins.getInstance()


definir roles personalizados def hudsonRealm = new HudsonPrivateSecurityRealm(false)
- Asignar permisos por job, carpeta o nodo hudsonRealm.createAccount("usuario", "password123")
- Integración con LDAP o GitHub OAuth instance.setSecurityRealm(hudsonRealm)
instance.save()
¿Qué son los jobs y builds en Jenkins?

📌 En Jenkins, un job es una unidad de


trabajo configurada para ejecutar tareas
como compilación, prueba o despliegue.
Un build es una ejecución específica de
un job, que genera logs, artefactos y
resultados.
📜 Script Groovy para crear job Freestyle:
Jenkins.instance.createProject(hudson.model.FreeStylePr
oject, "ejemplo-job")
¿Qué es un job en
Jenkins y cuál es su
función en el proceso
de integración
continua?
Configuración y
ejecución básica
Introducción a Pipelines y DSL en Jenkins

📌 Un pipeline en Jenkins es una secuencia


automatizada de tareas que define el ciclo de vida del
software: desde la compilación hasta el despliegue.
Jenkins permite escribir pipelines como código utilizando
un DSL (Domain-Specific Language) basado en Groovy,
lo que facilita su versionamiento, revisión y reutilización.
Introducción a Pipelines y DSL en Jenkins

✅ Conceptos clave: 📜 Ejemplo de Jenkinsfile declarativo básico:


pipeline {
- Un pipeline define etapas como agent any
build, test, deploy. stages {
stage('Build') {
- DSL Groovy permite escribir steps {
pipelines como código. }
echo 'Compilando proyecto...'

- Hay dos estilos: declarativo (más }


simple) y scripted(más flexible). stage('Test') {
steps {
- Jenkinsfile almacena el pipeline echo 'Ejecutando pruebas...'
directamente en el repositorio. }
}

}
}
Uso de plugins y su importancia en Jenkins

📌 Jenkins se basa en un sistema de plugins que extiende su funcionalidad.


Gracias a ellos, puedes integrar herramientas de construcción, pruebas,
despliegue, notificaciones y más. Los plugins son clave para adaptar Jenkins
a cualquier flujo de trabajo.
Uso de plugins y su importancia en Jenkins
✅ Plugins esenciales: 📜 Instalación por CLI:
- Pipeline: permite definir Jenkinsfiles. java -jar jenkins-cli.jar -s http://localhost:8080
- Git: integración con repositorios Git. install-plugin git workflow-aggregator docker-workflow

- Docker Pipeline: ejecución de


contenedores.
- Email Extension: notificaciones avanzadas.
- Role-Based Authorization Strategy:
control de acceso por roles.
Arquitectura y funcionamiento interno de
Jenkins
📌 Jenkins tiene una arquitectura modular
basada en el modelo maestro-agente. El
servidor maestro gestiona la UI, programación de
trabajos y coordinación, mientras que los
agentes (nodos) ejecutan los builds, permitiendo
distribuir la carga y escalar horizontalmente.
Creación y configuración de un nuevo job
en Jenkins
📌 Jenkins tiene una arquitectura modular basada en el modelo
maestro-agente. El servidor maestro gestiona la UI, programación de
trabajos y coordinación, mientras que los agentes (nodos) ejecutan los builds,
permitiendo distribuir la carga y escalar horizontalmente.
✅ Pasos para crear un job: 📜 Crear un job Freestyle por script Groovy:
- Seleccionar tipo de job: Freestyle, Pipeline, Jenkins.instance.createProject(hudson.model.FreeStyleP
Multibranch. roject, "nuevo-job")
- Configurar repositorio (Git, GitHub).
- Definir comandos de construcción (Maven,
Gradle, scripts).
- Agregar triggers y acciones post-build
(como notificaciones).
Introducción y estructura del Jenkinsfile

📌 El Jenkinsfile es un archivo que define el pipeline como código y se guarda


en el repositorio junto al proyecto. Esto permite versionar, revisar y reutilizar
el proceso de CI/CD. Puede escribirse en formato declarativo o scripted.
✅ Elementos del Jenkinsfile: 📜 Jenkinsfile ejemplo:
- pipeline {}: estructura principal. pipeline {
agent any
- agent: define dónde correr. stages {

- stages: conjunto de etapas (build, test, deploy).


stage('Build') {
steps {

- steps: instrucciones dentro de cada etapa. }


sh 'npm install'

}
stage('Test') {
steps {
sh 'npm test'
}
}
}
}
Uso de variables y parámetros en un job

📌 Jenkins permite personalizar los jobs usando parámetros y variables. Esto


permite que un mismo pipeline se comporte de forma distinta según el
ambiente, versión o tipo de despliegue.
✅ Tipos de parámetros:
- string, choice, booleanParam, password, etc.
- Uso de ${params.<nombre>} para acceder a parámetros.
- Variables de entorno disponibles automáticamente (BUILD_ID, JOB_NAME, etc).
Uso de variables y parámetros en un job
📜 Ejemplo con parámetro de entorno:
pipeline {
agent any
parameters {
string(name: 'ENTORNO', defaultValue: 'dev',
description: 'Ambiente de despliegue')
}
stages {
stage('Desplegar') {
steps {
echo "Desplegando en ${params.ENTORNO}"
}
}
}
}
Estrategias para la optimización de jobs

📌 A medida que crece el número de jobs, optimizar su ejecución se vuelve


clave. Esto incluye dividir etapas, usar nodos etiquetados, evitar
repeticiones innecesarias y limpiar builds antiguos.
✅ Estrategias efectivas:
- Uso de agentes específicos para ciertas etapas (agent { label 'docker' }).
- Dividir en múltiples stages y steps reutilizables.
- Ejecutar pruebas en paralelo.
- Usar caché de dependencias.
- Limpiar builds antiguos automáticamente con buildDiscarder.
Estrategias para la optimización de jobs
📜 Jenkinsfile optimizado:
pipeline {
agent any
options {
buildDiscarder(logRotator(numToKeepStr: '5'))
}
stages {
stage('Compilar') {
when {
branch 'main'
}
steps {
sh 'mvn clean package'
}
}
}
}
¿Qué es un Jenkinsfile
y cómo contribuye a la
automatización del
pipeline en Jenkins?
CI/CD y
despliegue
Conexión de Jenkins con sistemas de
control de versiones (SCM)
📌 Jenkins se puede integrar fácilmente con sistemas de control de
versiones (SCM) como Git, GitHub, GitLab o Bitbucket. Esta conexión
permite clonar el código fuente automáticamente al iniciar un job o pipeline.
✅ Acciones clave: 📜 Ejemplo de pipeline con Git:
- Configurar el plugin Git en Jenkins. pipeline {
agent any
- Agregar credenciales de acceso (SSH o stages {
token). stage('Checkout') {

- Clonar repositorios privados o públicos.


steps {
git credentialsId: 'github-creds', url:
- Usar webhooks para disparar builds desde 'https://github.com/usuario/repo.git'

SCM. }
}

}
}
Compilación y build de proyectos con
Maven en Jenkins
📌 Jenkins puede ejecutar tareas de construcción (build) usando
herramientas como Maven. Es común compilar proyectos Java, correr
pruebas y generar artefactos listos para producción.
✅ Pasos comunes: 📜 Jenkinsfile con Maven:
- Instalar Maven en Jenkins. pipeline {
agent any
- Configurar pom.xml en el proyecto. tools {

- Ejecutar comandos como mvn clean


maven 'Maven_3'
}

install. stages {
stage('Build') {
steps {
sh 'mvn clean install'
}
}
}
}
Creación de imágenes Docker desde
Jenkins
📌 Jenkins puede construir imágenes Docker como parte de un pipeline
CI/CD. Esto permite empaquetar aplicaciones listas para ser desplegadas
en cualquier entorno.
✅ Pasos clave: 📜 Jenkinsfile con Maven:
- Escribir un Dockerfile en el proyecto. pipeline {

- Usar el plugin Docker o shell script. agent any


stages {
- Autenticarse con el registry (DockerHub, stage('Build Docker Image') {
ECR, etc). steps {
sh 'docker build -t mi-app:latest .'
}
}
}
}
Despliegue de imágenes en entornos de
producción
📌 Una vez construida una imagen Docker, Jenkins puede automatizar su
despliegue a servidores, clústeres Kubernetes o servicios en la nube como
ECS o GKE.
✅ Estrategias comunes:
- Push a DockerHub o ECR.
- Conexión a un servidor remoto (via SSH).
- Uso de Kubernetes CLI o Helm desde
Jenkins.
Despliegue de imágenes en entornos de
producción
📜 Ejemplo de despliegue básico:
pipeline {
agent any
stages {
stage('Push') {
steps {
withCredentials([usernamePassword(credentialsId: 'docker-creds', usernameVariable:
'USER', passwordVariable: 'PASS')]) {
sh """
echo $PASS | docker login -u $USER --password-stdin
docker push mi-app:latest
"""
}
}
}
}
}
Monitoreo de cambios en repositorios con
Jenkins
📌 Jenkins puede monitorear cambios en repositorios Git y ejecutar pipelines
automáticamente. Esto se logra con polling (consulta periódica) o
integraciones con webhooks.
✅ Opciones disponibles: 📜 Activar webhook en GitHub:
- Polling SCM: Jenkins consulta cada X - URL: http://<jenkins-url>/github-webhook/
minutos. - Content type: application/json
- Webhooks: El SCM notifica a Jenkins en - Eventos: push
tiempo real.
- Ideal para activación automática de jobs.
Inicio automático de pipelines en Jenkins

📌 Jenkins permite iniciar pipelines automáticamente cuando ocurren eventos


específicos, como un push a Git o un cambio en una rama específica. Esto
garantiza automatización completa y rapidez en el ciclo de desarrollo.
✅ Métodos para activación automática:
- triggers en Jenkinsfile (pollSCM, cron,
githubPush)
- Webhooks desde repositorios
- Build periódico para tareas agendadas
Inicio automático de pipelines en Jenkins
📜 Jenkinsfile con trigger:
pipeline {
agent any
triggers {
pollSCM('* * * * *') // cada minuto
}
stages {
stage('Test') {
steps {
echo 'Ejecutando pruebas automáticas...'
}
}
}
}
Generación de informes y notificaciones
en Jenkins
📌 Jenkins puede generar reportes e informes de
pruebas, cobertura o calidad de código, y notificar
al equipo mediante correo electrónico, Slack o
Microsoft Teams. Esto permite mantener visibilidad
del estado del proyecto.
Generación de informes y notificaciones
en Jenkins
✅ Herramientas comunes: 📜 Jenkinsfile con notificación por correo:
- JUnit: resultados de pruebas pipeline {
- JaCoCo: cobertura de código agent any
post {
- SonarQube: calidad del código success {
- Email Extension Plugin o Slack Notification mail to: '[email protected]',
subject: 'Build exitosa',
body: 'El build finalizó correctamente.'
}
failure {
mail to: '[email protected]',
subject: 'Build fallido',
body: 'El build falló. Revisar logs.'
}
}
}
¿Se puede automatizar
el despliegue continuo
de una aplicación
usando Jenkins y
Maven?
Ejercicio Guiado:
Automatización del
Proceso de Construcción
con Jenkins y Java
Ejercicio Guiado: Automatización del
Proceso de Construcción
Trabajarás como parte del equipo de desarrollo de una
pequeña app Java llamada “SaludoApp”, que muestra
mensajes personalizados. Tu misión es automatizar el
proceso de compilación, pruebas y empaquetado
usando Jenkins.
Objetivos

● Instalar y configurar Jenkins.


● Crear un proyecto Java con Maven.
● Automatizar el proceso de construcción y pruebas
con Jenkins.
● Integrar Jenkins con un sistema de control de
versiones (GitHub).
● Configurar un Jenkinsfile para CI.
🛠 Paso 1: Instalar Jenkins
1. Instala Java (si no está): 3. Inicia Jenkins y accede en tu navegador:
sudo apt update sudo systemctl start jenkins

sudo apt install openjdk-11-jdk


URL: http://localhost:8080
2. Instala Jenkins:
4. Copia el password de instalación:
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo
apt-key add - sudo cat /var/lib/jenkins/secrets/initialAdminPassword
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ >
/etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins
5. Completa el asistente, instala plugins
sugeridos y crea el usuario.
🧱 Paso 2: Crear un proyecto Java con Maven

1. Crea el proyecto: 2. Abre y edita App.java:


mvn archetype:generate -DgroupId=com.equipo.saludo package com.equipo.saludo;
-DartifactId=saludoapp
-DarchetypeArtifactId=maven-archetype-quickstart public class App {
-DinteractiveMode=false public static String saludar(String nombre) {
return "¡Hola, " + nombre + "!";
cd saludoapp }

public static void main(String[] args) {


System.out.println(saludar("DevOps"));
}
}
🧱 Paso 2: Crear un proyecto Java con Maven

3. Agrega una prueba unitaria en AppTest.java: 4. Verifica que compile y pase:


package com.equipo.saludo; mvn clean test
import org.junit.Test;
import static org.junit.Assert.*;

public class AppTest {


@Test
public void testSaludo() {
assertEquals("¡Hola, DevOps!", App.saludar("DevOps"));
}
}
📤 Paso 3: Subir a GitHub
1. Crea un nuevo repositorio: saludoapp
2. Ejecuta:
git init
git remote add origin https://github.com/tu_usuario/saludoapp.git
git add .
git commit -m "Proyecto Java Maven SaludoApp"
git push -u origin main
🔁 Paso 4: Crear Job de Jenkins para el
proyecto
1. En Jenkins: Nuevo Item → Pipeline
2. Nombra el job como SaludoApp-CI
3. Elige “Pipeline script from SCM”
4. SCM: Git
5. URL del repo: https://github.com/tu_usuario/saludoapp.git
6. Script Path: Jenkinsfile
✍ Paso 5: Crear un Jenkinsfile en el proyecto

En la raíz del proyecto, crea un archivo llamado Jenkinsfile:


pipeline { stage('Compilar') { post {
agent any steps { success {
sh 'mvn clean compile' echo "🎉 El build fue exitoso"
tools { } }
maven 'Maven 3.8.6' }
jdk 'JDK11' failure {
} stage('Probar') { echo "💥 El build falló"
steps { }
stages { sh 'mvn test' }
stage('Clonar') { } }
steps { }
git
📌 Asegúrate de tener configurado en
'https://github.com/tu_usuario/saludoapp.git stage('Empaquetar') {
' steps { Jenkins:
} sh 'mvn package'
- Maven: Administrar Jenkins →
} }
} Herramientas → Maven installations
} - JDK: en la misma ruta, define JDK11
🧪 Paso 6: Ejecutar y verificar
1. Haz clic en “Build Now”.
2. Verifica que las etapas se ejecuten correctamente.
3. En caso de error, ajusta el Jenkinsfile o revisa consola.
Preguntas finales

- ¿Qué beneficios concretos viste al automatizar la construcción con


Jenkins?
- ¿Qué parte del proceso crees que sería más crítica en un equipo grande?
- ¿Cómo Jenkins asegura calidad antes de hacer despliegues?
- ¿Qué cambiarías en este pipeline para prepararlo para producción?
Entregable:

Cada equipo deberá:

- Subir su proyecto con Jenkinsfile a GitHub


- Mostrar en Jenkins una ejecución exitosa
- Presentar brevemente su experiencia: ¿qué aprendieron?, ¿qué les
sorprendió más?
Resumen de lo aprendido
- Introducción a Jenkins: Herramienta clave en
integración continua y despliegue continuo (CI/CD).
- Instalación y Configuración: Instalación en distintos
entornos, gestión de plugins, configuración de usuarios y
permisos para un uso eficiente.
- Creación y Ejecución de Jobs: Definición de jobs
básicos y pipelines con Jenkinsfile, integración con SCM
(Git) y uso de variables y parámetros.
- Automatización y Monitoreo: Implementación de
pruebas automatizadas, compilación con Maven,
creación de imágenes Docker y despliegues en
producción dentro de Jenkins.
Próxima clase…
Análisis estático de software

También podría gustarte