Introducción a Jenkins
Warning: This information may be outdated. Please note the date of the post.
Integración Continua (CI) como concepto.
¿Qué es Jenkins?
Jenkins es un servidor de automatización usado más para la integración continua y es de código abierto. Está basado en el proyecto Hudson. Está escrito en Java.
Jenkins es capaz de realizar múltiples tareas necesarias para asegurar una calidad en el software:
- Facilita el control de versiones
- Hace pruebas y testea el código
- Monitorización continua de las métricas de calidad de proyecto.
- Puede enviar los cambios una vez testeados al repositorio principal
- Automatiza la compilación y puede también automatizar el despliegue, una vez integrado los cambios testeados.
- Notifica de cualquier cambio o error a los integrantes del equipo.
- Permite generar y visualizar la documentación del proyecto.
- Cuenta con muchísimos plugins para realizar diferentes tareas.
Instalación de Jenkins
La instalación de Jenkins depende del SO en el que nos encontremos por lo que puedes seguir la guía de la documentación oficial
En mi caso voy a lanzar un contenedor con Docker desde la imagen de jenkins en concreto “jenkins/jenkins:lts”.
Para instalar Docker puedes ayudarte de mi post Introducción a Docker, o consultar la documentación oficial de Docker.
Una vez tengamos Docker instalado vamos a lanzar el contenedor de forma que:
docker run - Arranca el contenedor
-d - En segundo plano
-v - Indicamos el volumen como punto de montaje
-p - Exponemos los puertos, que utilizara el 50000 y el 8080 pero indicaremos el 9080 para jenkins porque el 8080 será para la aplicación que vamos a desplegar.
-e - Variable de entorno JENKINS_OPTS para indicar el puerto que va usar jenkins
--name - Nombre del contenedor
jenkins/jenkins:lts - Imagen
La instrucción queda de la siguiente manera:
docker run -d -v $(pwd)/jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 -p 9080:9080 -e JENKINS_OPTS="--httpPort=9080" --name jenkins jenkins/jenkins:lts
Comprobamos que está funcionando y podemos acceder al navegador en el puerto indicado
celiagm@debian:~/github/onebit$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f58dc8b0e18f jenkins/jenkins:lts "/sbin/tini -- /usr/…" 32 hours ago Up 7 hours 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:9080->9080/tcp, :::9080->9080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp jenkins

Unlock Jenkins
Como podemos apreciar en el navegador nos indica que tenemos que introducir una clave que se ubica en la ruta /var/jenkins_home/secrets/initialAdminPassword.
En este caso como hemos montado un volumen, accedemos a ese volumen y visualizamos la clave. También podríamos entrar en el contenedor con exec -ti y obtenerla.
celiagm@debian:~/docker/jenkins_home/secrets$ cat initialAdminPassword
Copiamos la clave y la introducimos en el navegador.
Configuración Jenkins
Una vez hecho eso nos saldrá la pantalla de personalización, para este ejemplo instalaremos los plugins sugeridos.

Ahora empezará a instalar

Crearemos el usuario administrador

Indicaremos la url, en este caso dejaremos localhost por defecto.

Ya tendríamos el sitio listo para usar

Seguridad
Iremos en el menú de la izquierda a » Manage Jenkins » En Security vamos a » Configure Global Security. Para configurar la seguridad de Jenkins.
En este caso está todo correcto, para este entorno de prueba pero aquí puedes modificarlo según tus necesidades

En Credentials podemos añadir formas de autenticación para conectarnos remotamente ya bien sea por usuario y contraseña o por clave ssh.

Jenkins CLI
Con Jenkins CLI nos referimos al cliente de Jenkins desde la línea de comandos. Es más rápido de gestionar y más eficiente en cuanto a memoria utilizada.
Para descargar Jenkins CLI accedemos a la url: http://docker.jenkins:9080/jnlpJars/jenkins-cli.jar
Si entramos en la url: http://localhost:9080/cli/
Nos aparecerá la forma de ejecutar el jenkins cli y los muchos comandos para su gestión.
Necesitaremos tener instalado java, en mi caso es:
sudo apt-get install default-jdk
Ejecutamos el siguiente comando, indicando la ruta donde tenemos el cli, y le indicamos la autentificación que en mi caso sera usuario y contraseña.
java -jar jenkins-cli.jar -s http://localhost:9080/ -auth admin:admin -webSocket help
Una vez nos hayamos logueado podemos ir probando comandos por ejemplo:
celiagm@debian:~/docker/jenkins_home$ java -jar /home/celiagm/jk/jenkins-cli.jar -s http://localhost:9080/ -auth admin:admin who-am-i
Authenticated as: admin
Authorities:
authenticated
Alias para facilitar el trabajo con Jenkins CLI
El comando a utilizar es muy tedioso de escribir y podemos crear un alias para ahorrarnos tiempo.
alias jenkinscli="java -jar /home/celiagm/jk/jenkins-cli.jar -s http://localhost:9080/ -auth admin:admin"
Si queremos saber la versión
celiagm@debian:~/docker/jenkins_home$ jenkinscli version
2.303.1
Comandos útiles
# Visualizar la id de la sesión
celiagm@debian:~/docker/jenkins_home$ jenkinscli session-id
50964909
# Listar las tareas (hemos creado una de prueba)
celiagm@debian:~/docker/jenkins_home$ jenkinscli list-jobs
prueba
# Reiniciar jenkins (esto no mata el contenedor)
celiagm@debian:~/docker/jenkins_home$ jenkinscli restart
celiagm@debian:~/docker/jenkins_home$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f58dc8b0e18f jenkins/jenkins:lts "/sbin/tini -- /usr/…" 34 hours ago Up 8 hours 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:9080->9080/tcp, :::9080->9080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp jenkins
# Lanzamos la tarea de prueba
celiagm@debian:~/docker/jenkins_home$ jenkinscli build prueba
celiagm@debian:~/docker/jenkins_home$ jenkinscli build prueba
Comprobamos en el navegador

Borramos la tarea
celiagm@debian:~/docker/jenkins_home$ jenkinscli delete-job prueba
celiagm@debian:~/docker/jenkins_home$ jenkinscli list-jobs
celiagm@debian:~/docker/jenkins_home$
[Este post está en proceso … ;)]
Fuentes:
OpenWebinars: Curso para principiantes por David Sebastián.