Jenkins es una herramienta fundamental en el mundo del desarrollo de software moderno, actuando como un centro de operaciones para la gestión de proyectos. Su propósito principal es facilitar la integración continua, una práctica que consiste en fusionar todo el código de manera continua en una compilación centralizada. En esencia, Jenkins se encarga de dos funciones clave: la integración automatizada y la monitorización externa de compilaciones. Al integrar y coordinar lanzamientos, determinar el estado de las compilaciones y mantener las actualizaciones, Jenkins se convierte en un aliado indispensable.

Si bien Jenkins es una solución poderosa, su configuración y aseguramiento en entornos específicos como CentOS pueden requerir atención detallada. Este artículo se centrará en cómo activar TLS (Transport Layer Security) en Jenkins, un protocolo de encriptación esencial para proteger las comunicaciones y los datos sensibles.
Entendiendo Jenkins y su Instalación en CentOS
Jenkins funciona sobre Java y se distribuye comúnmente como un archivo WAR (Web Application Archive), un paquete que contiene todos los recursos necesarios para ejecutar una aplicación web en un servidor. Para distribuciones basadas en Red Hat, como CentOS, existe un paquete de Jenkins. Sin embargo, es importante notar que CentOS 7, en particular, puede presentar particularidades que requieren un enfoque de instalación distinto al de otras distribuciones basadas en Red Hat o incluso a otras versiones de CentOS. Las operaciones que funcionan sin problemas en otros sistemas operativos de Red Hat a menudo se comportan de manera diferente en CentOS 7, lo que puede generar errores difíciles de depurar. Dado que el paquete de Jenkins es genérico para Red Hat y no está específicamente optimizado para CentOS, la probabilidad de encontrar problemas aumenta. Por esta razón, en lugar de depender del paquete genérico, exploraremos métodos de instalación más directos y controlados.
Existen dos enfoques principales para instalar Jenkins en CentOS: a través de un repositorio (repo) o utilizando directamente el archivo WAR.
Instalación mediante el archivo WAR y Configuración como Servicio
Si se opta por no instalar Jenkins a través de un repositorio y en su lugar se utiliza el archivo WAR, Jenkins no se comportará inicialmente como un servicio estándar. Para lograr esto y poder tratarlo como un servicio -iniciándolo, deteniéndolo y permitiendo que se ejecute en segundo plano con facilidad-, se requiere una configuración adicional.
Los comandos para la configuración de Jenkins deben ejecutarse como un usuario no root. Una vez que Jenkins esté funcionando, se debe finalizar el proceso para poder realizar las modificaciones necesarias para que funcione como un servicio.
El siguiente paso es crear un archivo de servicio para systemd. Navegue al directorio /etc/systemd/system/ y cree un nuevo archivo llamado jenkins.service. Dentro de este archivo, se añadirán las siguientes líneas, que siguen una estructura reconocible de archivos de configuración, similar a los archivos INI. Los textos entre corchetes indican los encabezados de sección.
[Unit]Description=Jenkins CI ServerAfter=network.target[Service]User=jenkinsGroup=jenkinsExecStart=/usr/bin/java -jar /path/to/your/jenkins.warRestart=alwaysType=simple[Install]MultiUserTargetAnalicemos las directivas de configuración:
[Unit]: Esta sección contiene directivas relacionadas con la unidad del servicio.
Description: Proporciona una descripción legible del servicio.After: Especifica que este servicio debe iniciarse después de que el objetivonetwork.target(la red) esté activo.
[Service]: Define cómo se ejecutará el servicio.
User: Indica el usuario bajo el cual se ejecutará el proceso de Jenkins. Es recomendable crear un usuario dedicado para Jenkins (por ejemplo,jenkins).Group: Especifica el grupo al que pertenecerá el proceso.ExecStart: La directiva crucial que define el comando para iniciar el servicio. Aquí se especifica la ruta al ejecutable de Java y la ruta al archivojenkins.wardescargado. Asegúrese de reemplazar/path/to/your/jenkins.warcon la ubicación real de su archivo WAR.Restart=always: Configura el servicio para que se reinicie automáticamente siempre que termine, independientemente de la causa.Type=simple: Indica que el proceso especificado enExecStartes el proceso principal del servicio y que systemd no debe esperar a que complete una inicialización compleja.
[Install]: Define cómo se debe habilitar el servicio.
WantedBy=multi-user.target: Indica que el servicio debe iniciarse cuando el sistema alcanza el nivel de ejecución multiusuario (equivalente a un "runlevel" en versiones anteriores a CentOS 7).
Una vez creado el archivo jenkins.service, es necesario recargar la configuración de systemd, habilitar el servicio para que se inicie al arrancar el sistema y luego iniciarlo:
sudo systemctl daemon-reloadsudo systemctl enable jenkins.servicesudo systemctl start jenkins.servicePara verificar que el servicio de Jenkins se ha iniciado correctamente y está en ejecución, puede usar el siguiente comando:
sudo systemctl status jenkins.serviceSi todo ha ido bien, verá un mensaje indicando que el servicio está activo y en ejecución. Esto confirma que el servicio de Jenkins ha completado su inicio y está operativo.
🐧Servicios y Systemd en GNU/Linux!😍
Asegurando Jenkins: Activación de TLS
Una vez que Jenkins está instalado y funcionando, el siguiente paso crítico es asegurar su entorno. Jenkins ofrece robustas configuraciones de seguridad y gestión de roles, esenciales para controlar el acceso y definir las acciones permitidas para los usuarios.
Para acceder a las opciones de configuración de seguridad, navegue a Manage Jenkins en el menú principal. En la página de gestión, encontrará varias opciones de personalización. Es probable que observe una alerta en la parte superior indicando "Unsecured Jenkins", lo que significa que cualquier persona en la red puede ejecutar procesos en su nombre. Es fundamental habilitar la autenticación para prevenir el uso indebido.
El primer paso es ir a Configure Global Security, que se encuentra cerca de la parte superior de la lista de enlaces en la página Manage Jenkins. Marque la casilla Enable security para desplegar un conjunto de opciones de configuración de seguridad.
Configuración de Autenticación y Autorización
La opción más directa para la autenticación es utilizar la base de datos de usuarios interna de Jenkins. Al seleccionar Jenkins’ own user database bajo la sección Access Control, Jenkins almacenará las configuraciones de usuario internamente.
Otras opciones disponibles para la autenticación incluyen la vinculación con usuarios y grupos de Unix existentes, la integración con un sistema de inicio de sesión a nivel organizacional (opción LDAP), o el uso de un servlet Java para gestionar el acceso.
Determinar si se debe permitir que nuevos usuarios se registren depende de sus necesidades específicas. En general, es aconsejable restringir el acceso, ya que permitir que los usuarios se registren libremente puede abrir la puerta a vulnerabilidades de seguridad. Para restringir esto, deseleccione la casilla Allow users to sign up. Con esta opción desactivada, solo los administradores podrán crear nuevas cuentas de usuario.
Bajo la sección Authorization, seleccione la opción Matrix-based security. Este método permite un ajuste fino de los controles de acceso sin necesidad de configuraciones complejas.
Inicialmente, verá un usuario llamado Anonymous. Un usuario anónimo es cualquier persona que accede al sistema sin iniciar sesión. Por defecto, el usuario anónimo no tiene permisos. Utilice el botón pequeño a la derecha de la fila Anonymous para seleccionar todos los permisos.
A continuación, utilice el campo de entrada User/group to add para especificar un nuevo usuario al que se le añadirán permisos. Normalmente, primero crearía un nuevo usuario y luego le asignaría permisos. Ingrese un nombre de usuario y presione Add. Tenga en cuenta una recomendación importante: debido a un error conocido, se aconseja mantener los nombres de usuario en minúsculas. Otorga a este nuevo usuario todos los permisos de la misma manera que lo hizo para el usuario anónimo.
Una vez que haya configurado los permisos iniciales, será redirigido automáticamente a una página de registro donde podrá crear su cuenta de administrador.
Regrese a la página de seguridad (Manage Jenkins -> Configure Global Security) y desplácese hacia abajo hasta la matriz de seguridad. Ahora que ha creado un usuario administrador, puede restringir los permisos para el usuario anónimo. Deseleccione todos los permisos en la fila Anonymous y luego haga clic en Apply y Save.
Si desactivó el registro automático anteriormente, es posible que deba crear manualmente usuarios adicionales. Regrese a la página Manage Jenkins, desplácese hacia abajo hasta cerca del final y haga clic en Manage Users. En la barra lateral izquierda, encontrará enlaces; haga clic en Create User. Ingrese la información para el nuevo usuario de la misma manera que creó el primer usuario y haga clic en Sign up. Será redirigido a la lista de usuarios, que ahora incluirá al nuevo usuario.
Este nuevo usuario no tendrá permisos, por lo que deberá repetir el proceso de asignación de permisos: vaya a Configure Global Security, use el campo User/group to add para añadir una fila a la matriz, especifique los permisos y haga clic en Apply y Save. Al crear nuevos usuarios, recuerde que la restricción de permisos es un aspecto clave de la seguridad.

Típicamente, el siguiente paso es asignar roles a sus usuarios, controlando sus habilidades exactas. Aunque no profundizaremos en este tema en este artículo, existen recursos excelentes para aprender más sobre la gestión de roles en Jenkins.
Activación de TLS/SSL para Comunicación Segura
Para activar TLS en Jenkins y asegurar las comunicaciones, es necesario configurar un certificado SSL/TLS. Este proceso implica obtener un certificado de una Autoridad Certificadora (CA) o generar uno de auto-firma para entornos de prueba.
Pasos generales para configurar TLS/SSL en Jenkins:
Obtener un Certificado SSL/TLS:
- Certificado de Autoridad Certificadora (CA): Si está ejecutando Jenkins en un entorno de producción y necesita una conexión segura confiable, obtenga un certificado de una CA pública (como Let's Encrypt, DigiCert, etc.). Esto implica generar una solicitud de firma de certificado (CSR) y enviarla a la CA.
- Certificado de Auto-firma: Para entornos de desarrollo o pruebas, puede generar un certificado de auto-firma. Esto no será confiable para navegadores externos sin configuración adicional, pero encriptará la comunicación.
Generar un KeyStore Java: Jenkins utiliza Java KeyStores (archivos
.jks) para almacenar claves privadas y certificados. Necesitará convertir su certificado y clave privada a un formato compatible con KeyStore.Si tiene su certificado (por ejemplo,
your_domain.crt) y su clave privada (por ejemplo,your_domain.key), puede usar la herramientakeytoolde Java para crear un KeyStore. Primero, combine la clave privada y el certificado en un archivo PKCS12:openssl pkcs12 -export -in your_domain.crt -inkey your_domain.key -out your_domain.p12 -name jenkinsLuego, importe el archivo PKCS12 a un KeyStore JKS:
keytool -importkeystore -srckeystore your_domain.p12 -srcstoretype PKCS12 -destkeystore jenkins.jks -deststoretype JKSSe le pedirá que establezca una contraseña para el KeyStore. Recuerde esta contraseña, ya que la necesitará para la configuración de Jenkins.
Configurar Jenkins para usar el KeyStore:La configuración de TLS para Jenkins generalmente se realiza a nivel del servidor proxy inverso (como Nginx o Apache) que se encuentra delante de Jenkins, o configurando Jenkins para que sirva HTTPS directamente.
Usando un Servidor Proxy Inverso (Recomendado):Este es el método más común y recomendado. Configura un servidor web (Nginx, Apache) para que escuche las solicitudes HTTPS, termine la conexión SSL/TLS y luego reenvíe las solicitudes a Jenkins (que puede estar ejecutándose en HTTP en un puerto diferente).
Ejemplo de configuración para Nginx:
Primero, asegúrese de que Jenkins se está ejecutando y es accesible (por ejemplo, en
http://localhost:8080). Luego, configure Nginx para que sirva Jenkins a través de HTTPS.Cree un archivo de configuración de Nginx para Jenkins (por ejemplo,
/etc/nginx/conf.d/jenkins.conf):server { listen 80; server_name your_domain.com; # Reemplazar con su dominio return 301 https://$host$request_uri; # Redirigir HTTP a HTTPS}server { listen 443 ssl http2; server_name your_domain.com; # Reemplazar con su dominio
}ssl_certificate /path/to/your/fullchain.pem; # Ruta a su certificado SSLssl_certificate_key /path/to/your/privkey.pem; # Ruta a su clave privada SSL# Opciones SSL adicionales para mejorar la seguridadssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_session_tickets off;location / { proxy_pass http://localhost:8080; # Jenkins corriendo en HTTP localmente proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
}# Configuración para WebSockets si es necesario para Jenkinsproxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";Después de guardar la configuración, reinicie Nginx:
sudo systemctl restart nginxConfiguración Directa de Jenkins para HTTPS (Menos Común):Si necesita que Jenkins sirva HTTPS directamente sin un proxy inverso, deberá configurar Jenkins para que apunte a su KeyStore. Esto se hace generalmente modificando los argumentos de inicio de Java para el servicio de Jenkins.
Edite su archivo
jenkins.service(o el script de inicio que utilice Jenkins) y modifique la líneaExecStartpara incluir las propiedades del sistema Java para TLS/SSL:[Service]User=jenkinsGroup=jenkins# Añadir las siguientes propiedades Java para configurar TLS/SSLExecStart=/usr/bin/java -Djava.security.egd=file:/dev/./urandom -Djavax.net.ssl.keyStore=/path/to/your/jenkins.jks -Djavax.net.ssl.keyStorePassword=your_keystore_password -jar /path/to/your/jenkins.warRestart=alwaysType=simpleReemplace
/path/to/your/jenkins.jkscon la ruta a su archivo KeyStore yyour_keystore_passwordcon la contraseña que estableció.Después de modificar el archivo de servicio, recargue la configuración de systemd e reinicie Jenkins:
sudo systemctl daemon-reloadsudo systemctl restart jenkins.serviceTenga en cuenta que al configurar Jenkins directamente para HTTPS, también deberá asegurarse de que el puerto HTTPS (generalmente 8443) esté abierto en su firewall.
sudo firewall-cmd --zone=public --add-port=8443/tcp --permanentsudo firewall-cmd --reloadLuego, acceda a Jenkins a través de
https://your_domain.com:8443(o el puerto que haya configurado).
Extensión de Funcionalidades con Plugins
Una vez que Jenkins está instalado, configurado y asegurado, es hora de adaptarlo a sus necesidades específicas. Jenkins, en su instalación básica, ofrece un conjunto limitado de funcionalidades. Su filosofía se alinea con el principio de "hacer una cosa y hacerla bien". Para expandir sus capacidades e integrarlo con una variedad de software externo, se utilizan los plugins.
Desde el menú principal de Jenkins, seleccione Manage Jenkins y luego Manage Plugins. Al hacer clic en la pestaña Available, accederá a una extensa lista de plugins disponibles. La elección de los plugins dependerá de sus proyectos y objetivos.

Entre los plugins más esenciales se encuentran aquellos que permiten la integración con sistemas de control de versiones como Git, SVN y Team Foundation Server. Si aún no está familiarizado con el control de versiones, es fundamental aprender sobre él e incorporarlo en sus proyectos.
Jenkins, aunque puede ser ligero, a menudo interactúa con proyectos que no lo son. Si su proyecto es de gran envergadura, es probable que utilice un gestor de compilaciones como Maven o Ant. Existen plugins para estos gestores que permiten a Jenkins interactuar con ellos de manera eficiente.
Creación de Tareas (Jobs) en Jenkins
Con Jenkins en funcionamiento y configurado según sus preferencias, puede empezar a utilizarlo para potenciar la integración de sus proyectos. Jenkins ofrece una amplia gama de aplicaciones prácticas, y la experimentación con sus configuraciones puede ser muy instructiva. Para comenzar, es útil entender cómo configurar una tarea básica.
Desde la página principal de Jenkins, seleccione New Item (Nuevo Elemento). En la página siguiente, especificará la configuración del trabajo. Observará que hay varias configuraciones disponibles al crear un nuevo proyecto. Generalmente, uno de los controles más importantes es la conexión a un repositorio de código fuente. Esto le proporcionará un campo de texto donde podrá agregar los comandos necesarios. En este ejemplo, utilizaremos esta sección para ejecutar un script. Si lo desea, puede añadir pasos de compilación subsiguientes.
Después de guardar el proyecto, será dirigido a su página de resumen. Haga clic en Build Now (Compilar Ahora) en el lado izquierdo para iniciar la compilación. Notará que el historial de compilaciones cambia momentáneamente para indicar que el proceso está en curso.
El enlace Console Output (Salida de Consola) en esta página es especialmente útil para examinar los resultados del trabajo en detalle. Proporciona información sobre las acciones realizadas durante la compilación y muestra toda la salida de la consola.
El estado de las compilaciones se indica de dos maneras: mediante un icono de clima (en el panel de control de la página principal) y mediante una bola de color (en la página del proyecto individual). En la imagen anterior, se aprecian nubes, lo que indica que algunas compilaciones recientes tuvieron éxito y otras fallaron. Si todas hubieran sido exitosas, vería una imagen de un sol.
Implementar una configuración de proyecto a gran escala implicará algunos pasos adicionales y ajustes finos, pero es evidente que, sin mucho esfuerzo, se pueden establecer monitores y controles muy útiles y pragmáticos para sus proyectos. Vale la pena buscar otros tutoriales, artículos y videos; hay una gran cantidad de información disponible, lo que hace que la configuración de la integración de proyectos con Jenkins sea relativamente sencilla. En particular, cerrar la brecha entre los conceptos básicos y los proyectos completos es una excelente manera de mejorar sus habilidades en Jenkins. Además, existen muchas plantillas para tipos de proyectos comunes, como aplicaciones PHP y Drupal, por lo que es muy probable que no necesite configurar todo desde cero.
La instalación de Jenkins en sistemas como CentOS o RHEL utilizando yum es una forma rápida de iniciar su viaje de automatización. Con Jenkins instalado, configurado mínimamente y razonablemente seguro, está listo para comenzar a aprovechar su potencial para la integración y la automatización de sus flujos de trabajo de desarrollo. La activación de TLS es un paso crucial para garantizar que estas operaciones se realicen de forma segura.