Saltar al contenido principal

CI/CD

El pipeline de Jenkins se define en un archivo llamado Jenkinsfile que debe residir en la raíz de tu repositorio. Para que Jenkins detecte y ejecute automáticamente este Jenkinsfile al producirse cambios, es necesario conectar Jenkins al repositorio (GitLab o GitHub) mediante el plugin correspondiente y configurar las credenciales y un webhook en la plataforma de Git, o bien habilitar el “polling” del repositorio desde Jenkins.

Estructura Básica de un Jenkinsfile

Dentro de un Jenkinsfile Declarativo encontraremos varias secciones clave:

  • pipeline
    Bloque raíz que engloba toda la definición del pipeline.
  • agent
    Define el nodo o entorno donde se ejecuta el pipeline (por ejemplo any, etiqueta de nodo o contenedor Docker).
  • environment
    Variables de entorno globales para todas las etapas.
  • parameters
    Parámetros de entrada que permiten personalizar la ejecución (p. ej. rama, versión).
  • options
    Opciones de ejecución, como tiempo máximo (timeout) o número de reintentos (retry).
  • stages
    Conjunto de bloques stage, cada uno con su propio steps (comandos a ejecutar).
  • post
    Acciones que se disparan tras la ejecución, según el resultado (success, failure, always).

Ejemplo de skeleton de Jenkinsfile

pipeline {
agent any

environment {
APP_NAME = 'mi-aplicacion'
DOCKER_REGISTRY = 'registry.ejemplo.com'
}

parameters {
string(name: 'BRANCH', defaultValue: 'main', description: 'Rama a construir')
}

options {
timeout(time: 30, unit: 'MINUTES')
retry(2)
}

stages {
stage('Checkout') {
steps {
git branch: "${params.BRANCH}", url: 'https://github.com/org/mi-repo.git'
}
}

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

stage('Test') {
steps {
sh 'mvn test'
}
}

stage('Docker Build & Push') {
when {
branch 'main'
}
steps {
script {
docker.build("${DOCKER_REGISTRY}/${APP_NAME}:${env.BUILD_NUMBER}")
.push()
}
}
}
}

post {
success {
echo 'Pipeline finalizado correctamente.'
}
failure {
echo 'Ha ocurrido un error en el pipeline.'
}
always {
cleanWs()
}
}
}