Modus

Introduccio-a-Jenkins

Introducción a Jenkins como gestor de ejecuciones de job de Talend

Talend Open Studio (TOS)

TOS, sin llegar a ser tan potente como su hermano mayor Talend Studio, tiene una oferta de módulos importante que no supone mayor impedimento para al desarrollo de jobs muy potentes.

En cambio, a la hora de ejecutar el paquete Java compilado, se echa de menos a la funcionalidad de planificación y seguimiento que ofrece el TAC (con licencias on-premise) o la TMC (en el caso de licencias Cloud).

Planificador de tareas de Windows

La solución en plataforma Windows, es el “viejo” planificador de tareas de Windows.

Basta con unos cuantos jobs para llegar a un cierto nivel de caos.

Hay que diseñar job específicamente con salida de consola a ficheros para poder saber lo que pasa en caso de fallo en la ejecución.

No es muy posible gestionar ejecuciones en varias maquinas y menos ejecutar jobs en instancia de cloud.

Jenkins al rescate

Hemos estado buscando una solución para crear un marco de ejecución mas eficiente y con más flexibilidad para job de Talend. Proponemos el uso de Jenkins junto con Nexus, ambos de código libre y gratuitos.

Jenkins es originalmente, una aplicación para desarrollo o integración continuo. Por lo tanto, está integrado con los repositorios comunes de manera nativa o mediante cienes de plugins. Jenkins un proyecto basado en Java, muy activo, lo que asegura una buena protección contra los fallos de sus bibliotecas y módulos.

Hemos elegido asociarlo con Nexus y así tener un almacenamiento con versionado de los diferentes ejecutables compilados desde TOS. De paso, si es necesario, podemos ejecutar otros script tales como Python u cualquier otro si fuese necesario.

jenkins-que-es

Qué es y qué hace Jenkins?

Jenkins es un servidor de automatización de código abierto que supervisa las ejecuciones de trabajos repetidos, como la construcción de proyectos de software y otras tareas repetitivas. Tiene una arquitectura de plugins que permite ampliarlo con nuevas funciones o personalizaciones. Jenkins admite varios lenguajes de programación y herramientas para integrarse con diversos sistemas de control de versiones.

Jenkins proporciona servicios de integración continua en un servidor en el que los desarrolladores pueden enviar código para que se construya, pruebe y despliegue. Ofrece muchas funcionalidades listas para usar, como notificaciones por correo electrónico, varios complementos para la gestión del control de código fuente, etc. Jenkins viene con configuraciones predeterminadas para las herramientas de desarrollo más populares, como Java, C/C++, Python, Ruby y otras. Un usuario puede configurar estos ajustes de acuerdo con los requisitos de su proyecto.

La función de integración continua (CI) permite a los desarrolladores automatizar el proceso de construcción mediante la integración de todas las actividades de desarrollo en un solo sistema, tales como pruebas unitarias automatizadas y análisis de código antes de confirmar los cambios en el repositorio de código fuente. La función CI asegura que cada vez que un desarrollador realiza un cambio en cualquier rama o sistema de control de versiones, se actualiza inmediatamente en Jenkins sin tener que reiniciar manualmente los trabajos una y otra vez cada vez que algo cambia en ellos.

Una instalación típica de Jenkins, se compone de un controlador y de un nodo. El nodo puede ser la misma maquina que el controlador, pero no se aconseja para entorno de producción por razón de seguridad dado que Jenkins tiene muchos derechos. En cambio el agente, está diseñado para ejecutar las tareas mandadas por el controlador con el menor impacto posible en la maquinas huéspedes que pueden ser además tanto una maquinas física, una maquina virtual, un contenedor Docker o incluso una instancia de cloud.

El agente ejecuta el código Java que le transmite el controlador, en nuestro caso eligiendo la versión adecuada en el repositorio de Nexus.

Freestyle versus Pipeline

En Jenkins, la unidad de código que se ejecuta se llama proyecto, los hay de varios tipos. Hemos elegido 2 tipos: Freestyle y Pipeline.

Freestyle

Un proyecto freestyle se configura seleccionando los pasos en una interfaz de menú que lista todas las posibilidades tanto como proceso antes de ejecución, de trigger o de tratamiento después de ejecución.

Es fácil de realizar un proyecto pero solo se ve como un único bloque de ejecución. Además es tedioso copiarlo e usarlo como plantilla.

 

Jenkins-freestyle
Jenkins-freestyle-proyect

Pipeline

Jenkins, da la posibilidad de escribir todos los pasos de un proyecto con lenguaje Groovy en un bloque de texto de tipo “Jenkins File”. Se copia fácilmente, puede incluir paso de ejecución condicional, lectura de fichero externos… Groovy está derivado de Java y tiene acceso a todas sus bibliotecas.

 

Como vamos a bajar un ejecutable desde un repositorio para poder ejecutarlo en un agente, puede haber fallos en diferentes etapas. La vista de ejecución permite identificar inmediatamente donde ocurrió el fallo y consultar el log del paso correspondiente.

Jenkins-Pipeline-Script
jenkins-pipeline-stage-view

Plugins

A la hora de elegir de instalar un plugin, hay que tomar en cuenta si el proyecto es suficiente activo para asegurar una reacción rápida en caso de fallo de seguridad.

Hay plugins que cubren casi cualquier necesidad. Presentamos una lista de los que pueden ser útiles.

  • Locale: Para cambiar el idioma de la aplicación diferente del navegador, aconsejado para seguir los tutoriales que son mayoritariamente en inglés.
  • Nexus Platform: Permite la integración con Nexus, no sirve para cargar código en el repositorio.
  • Job Configuration History: Guarda copia de todo los cambio de configuración y Job. Permite comparar y restaurar versión antigua de un elemento.
  • Calendar View: Nos da una vista de calendario de los proyectos planificados incluyendo el resultado para el pasado.
  • PowerShell plugin Version: En caso de usar powershell permite de disponer de sus funciones dentro de un proyecto. En plataforma windows permite de diseñar pipeline más eficientes.
  • Role-based Authorization Strategy: Añade una gestión fina de los accesos y capacidades, necesario para un uso en producción.
  • Versions Node Monitors plugin: Ayuda a asegurar que los nodos de ejecución tienen la versión de Java y del agente adecuada para correcta actuación del controlador.
  • Blue Ocean: Nuevo interfaz pensada para proyecto de tipo pipeline hospedados en gestor de contenido como GIT por ejemplo.
  • Docker: Permite de instalar un nodo en un contenedor Docker
  • Naginator: permite una gestión fina en caso de fallo de ejecución en un proyecto de tipo freestyle.

Solamente, es una pequeña selección que nos da una idea de la amplitud de la oferta que tiene Jenkins gracias a la comunidad de código libre.

En la siguiente parte, vamos a detallar la implementación de nuestra solución incluso la configuración de Jenkins.

Post relacionados