Jenkins, más que un software de integración continua.

José Verdugo

José Verdugo

Compartir

Jenkins, más que un software de integración continua.

En este artículo veremos como Jenkins nos puede ayudar para enmallar procesos batch y al final un listado de códigos que podrá reutilizar para fin.

Como muchos saben, Jenkins es una herramienta open source de integración continua, usada principalmente para orquestar procesos en el desarrollo de software, pero sus grandes capacidades permiten utilizarlo para mas cosas.

Si revisamos sus características, podemos identificar a grandes rasgos las siguientes:

  • Puede orquestar cualquier tipo de proceso.
  • Utilizada para ejecutar tareas manuales, periódicas o automáticas.
  • Cuenta con más de 1400 plugins
  • Puede aumentar su capacidad de cómputo añadiendo nuevos agentes o servidores
  • Fácil de usar
  • Dashboard para visualizar estado de tareas.

Si bien Jenkins fue pensado para orquestar procesos de desarrollo, las siguientes características permite utilizarlo fácilmente como enmallador de procesos:

  • Permite ejecución de procesos secuenciales.
  • Monitoreo de procesos
  • Permite ejecución a horas determinadas
  • Ejecución en base a eventos
  • Ejecución distribuida en varias máquinas
  • Alertas ante problemas en algún proceso

Jenkins resuelve la secuencialidad de pasos creando pipelines, que son una secuencia de pasos que se codifican en un archivo que llamaremos Jenkinsfile en lenguaje groovy.

Jenkins trabaja con un servidor master al cual se les puede agregar esclavos o maquinas de diferentes plataformas.


Si bien es cierto Jenkins, cuenta con varios tipos de job, con el del tipo “Pipeline” es posible orquestar procesos sin mayor problema.

Como todo proceso que se enmalla, es posible ejecutarlo a una determinada hora como se indica en la siguiente imagen.

Ejemplos de Pipeline básico

Uso de stage

node {
   stage('Etapa 1') {
      sleep 3
      echo "Finaliza etapa 1"
   }
   stage('Etapa 2 paralela') {
       parallel(
           'Etapa 2 A': {
               sleep 5
               echo "Finaliza etapa 2 A"          
           },
           'Etapa 2 B': {
               sleep 2
               echo "Finaliza etapa 2 B"
           }
       )
   }
   stage('Etapa 3') {
      sleep 3
      echo "Finaliza etapa 3"
   }
}

Variables

node {
   texto = 'Hola' //Variables string con comillas simples o dobles
   numero = 999  //Puedo o no se indica el tipo de variable
   numero ++
   echo texto + " " + numero
}

Sentencias de control y loop


node {
   stage('Ejemplo') {
       valor = true
       if (valor) {
           echo 'en if'
       }
       
       for (i = 0; i< 10; i++) {
           echo "For: " + i
       }
   }
}

Métodos

def metodo(texto) {
  echo texto
}    
node(){
   stage("Saludando") {
       metodo("hola")
   }
}

Importar clases

import java.text.SimpleDateFormatnode() {
   def dateFormat = new SimpleDateFormat("yyyyMMdd")
   def date = new Date()
   fechaConFormato = dateFormat.format(date)
   echo fechaConFormato
}

Sintaxis declarativa

pipeline {
   agent any
   stages {
       stage('Etapa 1')  {
           steps {
               echo  "En Etapa 1"
           }
       }
       stage('Etapa 2') {
           steps {
                echo  "En Etapa 1"
           }
       }
       stage('Etapa 3') {
           steps {
                echo  "En Etapa 3"
           }
       }
   }
   post {
       always {
           echo 'Ejecuta siempre'
       }
       failure {
           echo 'Ejecuta en error'
       }    }
}