Jenkins utilizando Docker y proxy inverso con Nginx
Aprendemos a instalar un entorno de integración continua con Jenkins, utilizando en esta ocasión el contenedor oficial para Docker. Además, para conseguir una dirección web amigable y no acceder a él a través de un puerto, configuraremos un proxy inverso con Nginx.
Instalación de Docker en Ubuntu 18.04
En esta ocasión voy a utilizar mi VPS que tengo creado en Clouding.io Una vez he accedido a él vía SSH, el primero paso es actualizar el sistema e instalar Docker, tal y como indico a continuación:
#Actualizamos el sistema
sudo apt update
Desinstalamos las versiones antiguas de Docker que podamos tener instaladas en el host:
sudo apt remove docker docker-engine docker.io
Añdimos los programas y librerías para su funcionamiento:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Importarmos la clave GPG que utiliza el repositorio de Docker:
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
Añadimos el repositorio:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable"
Volvemos a actualizar e instalamos:
sudo apt update
sudo apt install docker-ce
Las operaciones de estado, parada y encendido para Docker en el host son:
# Estado
sudo systemctl status docker
# Encendido
sudo systemctl start docker
# Parada
sudo systemctl stop docker
Ahora ya podemos descargar y poner en marcha el contenedor con Jenkins
Instalar Jenkins vía Docker
Jenkins es el producto más popular y utilizado en los entornos de integración conntinua.
En esta entrada vamos a utilizar la imagen oficial. Además le indicaremos un puerto, en este caso el 8080, que es el que viene por defecto y un volumen para que se almacenen los datos de forma no volatil.
sudo docker volume create jenkins_home
sudo docker run -d -v jenkins_home:/var/jenkins_home \
-p 8080:8080 -p 50000:50000 \
jenkins/jenkins:lts
Una vez creado ya la podemos ver en funcionamiento:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d345b65306ef jenkins/jenkins:lts"/sbin/tini -- /usr/…" 22 hours ago Up 22 hours 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp priceless_khorana
Podemos comprobar el estado del puerto:
davidochobits@servubuntu:~# sudo lsof -i :8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 10484 root 4u IPv6 10153178 0t0 TCP *:http-alt (LISTEN)
Por último., que no menos importante, es utilizar un proxy inverso con Nginx, para que no tener que utilizar el puerto en el navegador.
Proxy inverso con Nginx
La instalación de Nginx es bien sencilla, de hecho todos los pasos os los explique en otra entrada: Instalar y configurar un proxy inverso con Nginx en Ubuntu 18.04
En nuestro caso el fichero de configuración contiene la siguiente información:
server {
listen 80;
listen [::]:80;
server_name jenkins.bitsandlinux.com;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Una vez creado recordar crear el correspondiente enlace simbólico:
sudo ln -s /etc/nginx/sites-available/jenkins.bitsandlinux.com \
/etc/nginx/sites-enabled/
Y reiniciamos el servidor web:
sudo systemctl restart nginx
Evidentemente, previamente, debemos tener creado el subdominio en nuestro proveedor y asignarle la IP del VPS.
Habilitar HTTPS con Lets Encrypt y Certbot
Por último, que no menos importante, habilitamos la conexión HTTPS con Let’s Encrypt utilizando la herramienta Certbot
sudo apt-get install python-certbot-nginx
Una vez hecho esto, solo hemos de utilizar la herramienta:
sudo certbot --nginx
Nos hará una serie de preguntas y al final listará los proyectos web que ha detectado y debemos seleccionar cuál de ellos será al que se le añadirán los certificados. Todo bastante fácil la verdad.
Los paquetes de Certbot vienen con un trabajo cron o un temporizador systemd que renovará los certificados automáticamente antes de que caduquen. No necesitararemos ejecutar Certbot nuevamente, a menos que cambiemos su configuración. Puede probar la renovación automática de los certificados ejecutando este comando:
sudo certbot renew --dry-run
La herramienta añadira la tarea programada en algún de los siguientes lugares:
/etc/crontab/
/etc/cron.*/*
systemctl list-timers
Podemos comprobar el certificado desde la siguiente URL: https://www.ssllabs.com/ssltest/
Instalación web de Jenkins
Al acceder por primera vez a la URL, se nos indicará que consultemos un fichero en el contenedor, con una clave para poder acceder por primera vez:
Para localizar esta información, podemos ejecutar desde la consola de comandos:
sudo docker exec -ti d345b65306ef cat \
/var/jenkins_home/secrets/initialAdminPassword
En el siguiente paso se nos pregunta si queremos instalar los plugins recomendados:
Podemos ver el estado de instalación:
Una vez finalizada la instalación debemos definir las credenciales:
Definimos la URL :
Y ya hemos finalizado:
De esta manera ya podemos acceder a Jenkins:
Y esto es todo. Espero que esta entrada os sea de utilidad en algún momento.