Cómo programar un trabajo con Jenkins

En este tutorial, repasaremos ejemplos sobre cómo programar un trabajo en Jenkins para que se ejecute periódicamente usando Cron y cómo ejecutarlo observando otros proyectos.

Introducción

Programar un trabajo en Jenkins es muy útil cuando se trata de desarrollar un gran producto. Imagine qué gran ventaja es transformar una tarea que consume mucho tiempo en un trabajo automatizado. No necesita supervisión y, mientras no haya errores en el flujo de trabajo, no debería tener preocupaciones.

En el artículo de hoy, haremos un trabajo que se ejecutará cada cinco minutos y tendrá el siguiente resultado:

1
2
3
4
5
Hello, World!
Today's:
<<date>>
Here's the current time:
<<time>>

Además, crearemos un trabajo que observe otro proyecto y, según su estado, imprima una declaración automática.

Casos de uso para automatización con Jenkins

Pero antes de sumergirnos en la parte técnica, tomemos un momento para considerar qué se puede automatizar en Jenkins. Por supuesto, con un poco de imaginación, puede abordar la mayoría de los problemas y automatizarlos. Echemos un vistazo a un ejemplo que podría automatizarse con Jenkins si tiene un poco (más) de paciencia y también está ansioso por profundizar sus habilidades de Jenkins.

Los productos como Amazon Echo y Alexa podrían configurarse para llamar a los trabajos de Jenkins que realizan varias acciones. Podría integrarlo con relativa facilidad en su hogar inteligente:

  1. Di, "Alexa, cierra las puertas" (ese sería el disparador, lo que significa que Jenkins escuchará ese evento).
  2. La habilidad de Alexa activa un trabajo de Jenkins.
  3. El trabajo de Jenkins usará un script para llamar a la API del sistema de bloqueo de puertas inteligentes.
  4. Alexa espera a que termine el trabajo de Jenkins y le dice cómo le fue, es decir, "Puerta cerrada con éxito", "Las puertas ya están cerradas" o "Las puertas no se pudieron cerrar\ “.

Por supuesto, eso no es un trabajo de CI/CD, pero está dentro del dominio de las posibilidades de la tecnología existente con Jenkins.

Requisitos

  • Un servidor Jenkins: para este tutorial, usaremos la imagen oficial de Docker para configurar un servidor Jenkins
  • Un trabajo que le gustaría automatizar

Crear un trabajo de Jenkins

Inicie sesión en su aplicación Jenkins y haga clic en Crear un trabajo. No importa el tipo de trabajo. Puede ser Freestyle, Maven, etc. Todo lo que importa es cómo configuramos el programador.

Para este artículo, usaremos Pipeline. Elija un nombre para su proyecto y guárdelo:

create jenkins project

Ahora, antes de ocuparnos de la parte de la programación, configuremos el script Pipeline Groovy que imprimirá el mensaje de la introducción.

Desplácese hacia abajo hasta Pipeline y agregue la siguiente secuencia de comandos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
pipeline {
    agent any

    stages {
        stage('Write Greetings') {
            steps {
                echo 'Hello, World!'
            }
        }
        
        stage('Write Date') {
            steps {
                print 'Today\'s '
                print new Date().format("dd-MM-yyyy", TimeZone.getTimeZone("UTC"))
            }
        }
        
        stage('Write Hour') {
            steps {
                print 'Here\'s the current time '
                print new Date().format("HH:mm:ss", TimeZone.getTimeZone("UTC"))
            }
        }
    }
}

El guión tiene tres etapas: Escribir saludos, Escribir fecha y Escribir hora. Usamos etapas para definir y estructurar mejor nuestro guión. Además, las etapas se pueden ver en la interfaz de usuario de Jenkins.

En caso de que alguno de ellos falle, sabrás cuál:

Pipeline Groovy Script

Ejecutando el trabajo

¡Ya tenemos nuestro trabajo listo para ser disparado! Hagamos clic en Crear ahora y verifiquemos el resultado:

Build the jenkins job

1
2
3
4
5
6
7
8
9
Started by user Alex
Running in Durability level: MAX_SURVIVABILITY
Running on Jenkins in /var/jenkins_home/workspace/Scheduled Pipeline
Hello, World!
Today's:
24-12-2020
Here's the current time:
16:00:38
Finished: SUCCESS

También puede ver en la página del trabajo el tiempo promedio para cada etapa:

Jenkins Job Stage Details

Hay muchas formas de activar un trabajo de Jenkins: manualmente (por supuesto), usando una expresión de Cron, ganchos, viendo otros proyectos, etc.

Programación de trabajos de Jenkins con Cron

Comencemos con la activación de un trabajo a través de la utilidad Cron. Elegiremos Construir periódicamente y para el campo Horario usamos la siguiente expresión:

1
H/5 * * * *

Schedule the Jenkins Job

Esta expresión significa que el trabajo se ejecutará cada 5 minutos. Algunos ejemplos útiles de otros patrones podrían ser:

  • 0 0 13 1/1 * ? * – cada hora, a partir de las 13:00;
  • 0 0 17 ? * LUN-VIE * – todos los días hábiles, a las 5 PM;

Si no quiere aprender este tipo de formato para programar su trabajo, puede usar un generador de Cron Expression como CronMaker.

Veamos el resultado. Para esto, tendremos que esperar. Después de 10 minutos, debería ver que 2 trabajos se activaron automáticamente:

Jenkins Job Results

Observe que el primer trabajo se ejecutó a las 9:12 p. m., luego a las 9:17 p. m. y el último a las 9:22 p. m. ¡Entonces la regla funcionó! Tenemos un trabajo que se ejecuta cada 5 minutos.

Programación de un trabajo de Jenkins observando otros proyectos

Ahora que hemos visto cómo podemos programar un trabajo periódicamente, vamos a crear otro que se active cada vez que el primero tenga éxito. Cree otro proyecto de Pipeline y agregue el siguiente código:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
pipeline {
    agent any

    stages {
        stage('It worked') {
            steps {
                echo 'The other job worked!'
            }
        }
    }
}

Tenemos nuestro script de canalización, programémoslo. En la pestaña Generadores de compilación, seleccione Crear después de compilar otros proyectos.

Ingrese el proyecto que necesita ser visto y seleccione los casos en los que este debe activarse:

Watch Projects

Guárdalo y esperemos un poco. Debería ver que el nuevo trabajo se activa cada vez que el primero tiene éxito. Puede ver los detalles de la primera ejecución de este segundo trabajo que fue activado por el trabajo creado antes:

Jenkins Job Details

Aquí está la salida:

1
2
3
4
5
6
7
Started by upstream project "Scheduled Pipeline" build number 7
originally caused by:
 Started by timer
Running in Durability level: MAX_SURVIVABILITY
Running on Jenkins in /var/jenkins_home/workspace/The other job worked
The other job worked!
Finished: SUCCESS

Conclusión

La automatización es muy útil y una de las cosas clave que nos trae la tecnología, independientemente del proceso que quieras automatizar.

En este artículo, hemos repasado cómo programar un trabajo en Jenkins para que se ejecute periódicamente usando un patrón de Cron, así como para que se ejecute cuando se construyen otros proyectos.