Mi Blog
▷ Cómo ejecutar jobs de Jenkins remotamente

Cómo ejecutar jobs de Jenkins remotamente

 

Jenkins es una de las herramientas de automatización más utilizadas para la integración continua en entornos de desarrollo y operaciones. En muchos casos, es necesario ejecutar jobs de Jenkins de forma remota, ya sea para integrarlos con otros sistemas, automatizar tareas desde scripts externos o mejorar la eficiencia en los flujos de trabajo.

Seguid leyendo y os mostraré los pasos para ejecutar jobs de Jenkins remotamente...

⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 ¡DESCÚBRELOS! 🔥

 

 

¿QUÉ ES UNA API?

Una API (Application Programming Interface, o Interfaz de Programación de Aplicaciones) es un conjunto de reglas y definiciones que permite que diferentes sistemas, aplicaciones o servicios se comuniquen entre sí.

Una API actúa como un intermediario entre un programa y otro. En lugar de que los desarrolladores necesiten conocer todos los detalles internos de una aplicación o sistema, pueden usar una API para interactuar con él de manera estructurada.

Por ejemplo:

  • API de Google Maps: Permite a los desarrolladores integrar mapas en sus aplicaciones sin tener que construir un sistema de mapas desde cero.
  • API de Jenkins: Permite iniciar jobs o consultar el estado de Jenkins desde otros sistemas mediante peticiones HTTP.

 

Tipos de APIs:

  • APIs de sistema: Permiten que un sistema operativo interactúe con el hardware (ej. API de Windows para manejar archivos).
  • APIs de bibliotecas y frameworks: Permiten a los desarrolladores usar funciones de un framework sin conocer todos los detalles internos (ej. API de TensorFlow para IA).
  • APIs web: Permiten que sistemas basados en la web se comuniquen a través de HTTP/HTTPS (ej. API de REST o GraphQL).

 

Muchas APIs web usan REST, que permite enviar y recibir datos en formato JSON o XML usando métodos como:

  • GET → Obtener información
  • POST → Enviar datos
  • PUT → Actualizar datos
  • DELETE → Eliminar datos

 

Beneficios de una API:

  • Reutilización: Permiten integrar servicios sin reinventar la rueda.
  • Estandarización: Siguen reglas claras para interactuar con aplicaciones.
  • Escalabilidad: Facilitan la creación de sistemas modulares y conectados.

 

  

Web Oficial: https://www.jenkins.io/

 

 

Jenkins es una plataforma open-source para DevOps.

 

 

1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL

  • Un equipo con Jenkins instalado
  • Un equipo con curl instalado

 

 

2.- ESCENARIO INICIAL

Para el escenario inicial, tenemos un servidor de Jenkins con N jobs y N agentes. Por ejemplo, la task2 ejecuta de forma remota a través de la API el Job4 con un agente Windows 10. Existe otra task4 que ejecuta el job6 de forma también remota con un agente Windows 7. La configuración es exactamente la misma para ambos jobs, por lo que solamente solo nos centraremos en uno de los casos.

Ejecución remota de jobs en JenkinsPosible escenario inicial

 

 

3.- CREAR TOKEN DE ACCESO

El primero paso que necesitamos es generar un token de acceso para poder ejecutar remotamente jobs. Para ello, accederemos a la URL del servidor de Jenkins $JENKINS_URL:PUERTO/user/admin/security/. En la primera pantalla debemos hacer clic en "Add new token":

Ejecución remota de jobs en JenkinsAñadir nuevo token

 

 

Introduciremos el nombre para identificar nuestro token, en este caso lo he llamado "REMOTE_BUILDS" y generaremos el token:

Ejecución remota de jobs en JenkinsGenerar nuevo token

 

 

Copiaremos nuestro token y lo guardaremos en un lugar seguro si es un entorno de producción, como por ejemplo en un Keepass o en Passbolt:

Ejecución remota de jobs en JenkinsCopiar el Token en lugar seguro

 

 

3.- CREAR JOB TIPO ESTANDARD

Para este primer ejemplo, crearemos un job de tipo estándar y restringiremos el job para que se ejecute en el agente Windows7_Agent1. Además, debemos activar la opción de "Lanzar ejecuciones remotas" para que el job pueda recibir solicitudes a través de la API. Como medida de seguridad, debemos introducir un identificador de seguridad para poder ejecutar el job, en este ejemplo el identificador es "REMOTING_HAG67-QU124":

Ejecución remota de jobs en JenkinsCrear un job

 

 

Crearemos los steps necesarios del job. Los steps pueden ser prácticamente cualquier cosa, desde clonar un repositorio remoto, compilar un proyecto, descargar un fichero, realizar test unitarios etc... Para este ejemplo el "step" es solamente un "echo" de un mensaje y guardaremos el job.

Ejecución remota de jobs en JenkinsCreación de un step

 

 

5.- EJECUTAR EL JOB REMOTAMENTE (SIN PARÁMETROS)

Para ejecutar el job de forma remota, haremos uso de la herramienta curl. Si hacemos la primera prueba sin utilizar la autenticación correcta, obtendremos un error. Por ejemplo, si ejecutamos el comando:

curl http://$JENKINS_URL:$PUERTO/job/Job6_Remote/build?token=REMOTING_HAG67-QU124 

 

 

Al no haber utilizado las credenciales correctas, obtendremos el error de "Authentication required":

Ejecución remota de jobs en JenkinsAutenticación requerida

 

 

Ahora, si introducimos el usuario y el token con la opción de --user, veremos que ya no obtenemos ningún error:

curl --user admin:11e39d7453aa2a5765f409a68de733003f http://$JENINS_URL:$PUERTO/job/Job6_Remote/build?token=REMOTING_HAG67-QU124

 

 

En la siguiente imagen podemos ver como la ejecución no arroja ningún error:

Ejecución remota de jobs en JenkinsJob ejecutado remotamente 

 

 

Ahora, si miramos la lista de ejecuciones del Job6_Remote creado anteriormente, veremos que se ha ejecutado correctamente: 

Ejecución remota de jobs en JenkinsJob ejecutado y lanzado remotamente

 

 

Si abrimos el log de la ejecución, veremos que el job se ha ejecutado bien:

Ejecución remota de jobs en JenkinsLog de ejecución

 

 

6.- EJECUTAR EL JOB REMOTAMENTE (CON PARÁMETROS)

El job anterior era un job sin parámetros, pero, también es posible ejecutar de forma remota un job de Jenkins pasándole parámetros de ejecución. Por ejemplo, en este caso añadiremos un parámetro llamado DIRNAME y al job le añadiremos una línea para que cree el directorio $DIRNAME en batch con mkdir %DIRNAME%:

Ejecución remota de jobs en JenkinsParámetro DIRNAME

 

 

Para ejecutar el job en remoto y pasarle parámetros debemos utilizar buildWithParameters?token=$TOKEN&PARAM1=var1&PARAM2=var2. Para nuestro ejemplo actual ejecutaremos:

curl --user admin:11e39d7453aa2a5765f409a68de733003f http://$JENKINS_URL:$PUERTO/job/Job6_Remote/buildWithParameters?token=REMOTING_HAG67-QU124&DIRNAME=dir_pruebas

 

 

En la siguiente imagen, podréis ver la ejecución en remoto pasándole también un parámetro:

Ejecución remota de jobs en JenkinsEjecución en remoto con un parámetro 

 

 

Si revisamos el log del job, veremos que efectivamente, se ha mostrado el mensaje inicial pero también se ha creado el directorio llamado dir_pruebas:

Ejecución remota de jobs en JenkinsJob ejecutado con parámetros

 

 

7.- CREAR JOB TIPO PIPELINE

Si queréis el job en formato pipeline, aquí os dejo un ejemplo del job anterior con un parámetro en formato pipeline:

pipeline {
agent { node 'Windows7_Agent1' }

parameters {
string(name: 'DIRNAME')
}

stages {
stage('Mostrar Mensaje') {
steps {
bat 'echo "JOB EJECUTADO REMOTAMENTE"'
bat 'mkdir %DIRNAME%'
}
}
}
}
 

 

 

Espero que or sirva de ayuda y ahora ¡podáis ejecutar jobs en remoto!

 

 

ENJOY!


Raúl Prieto Fernández

Sitio Web: raulprietofernandez.net

Si quieres ir rápido, ve solo. Si quieres llegar lejos, ve acompañado.

Acerca de Mi

RPF

Soy Ingeniero Téc. Industrial Mecánico, Administrador de Sistemas Informáticos, Desarrollador de Aplicaciones Informaticas Web, Técnico Superior en PRL, Experto en Energías Renovables... y trabajo actualmente como Senior DevOPS en HP SCDS.

Contactar conmigo

E-Mail: Contactar

Web: https://www.raulprietofernandez.net

APÚNTATE GRATIS

VIP RPF
Entra en la Comunidad VIP y consigue acceso a las descargas en PDF, Trucos y Videotutoriales ocultos y mucho más... ¡Muy Pronto!