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:

1 2 #Actualizamos el sistema sudo apt update #Actualizamos el sistema sudo apt update

Desinstalamos las versiones antiguas de Docker que podamos tener instaladas en el host:

1 sudo apt remove docker docker-engine docker.io sudo apt remove docker docker-engine docker.io

Añdimos los programas y librerías para su funcionamiento:

1 sudo apt install apt-transport-https ca-certificates curl software-properties-common sudo apt install apt-transport-https ca-certificates curl software-properties-common

Importarmos la clave GPG que utiliza el repositorio de Docker:

1 sudo curl -fsSL https: // download.docker.com / linux / ubuntu / gpg | sudo apt-key add – sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

Añadimos el repositorio:

1 2 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable"

Volvemos a actualizar e instalamos:

1 2 sudo apt update sudo apt install docker-ce sudo apt update sudo apt install docker-ce

Las operaciones de estado, parada y encendido para Docker en el host son:

1 2 3 4 5 6 # Estado sudo systemctl status docker # Encendido sudo systemctl start docker # Parada sudo systemctl stop docker # 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.

1 2 3 4 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 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:

1 2 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 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:

1 2 3 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 ) 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:

1 2 3 4 5 6 7 8 9 10 11 12 13 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 ; } } 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:

1 2 sudo ln -s / etc / nginx / sites-available / jenkins.bitsandlinux.com \ / etc / nginx / sites-enabled / sudo ln -s /etc/nginx/sites-available/jenkins.bitsandlinux.com \ /etc/nginx/sites-enabled/

Y reiniciamos el servidor web:

1 sudo systemctl restart nginx 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

1 sudo apt-get install python-certbot-nginx sudo apt-get install python-certbot-nginx

Una vez hecho esto, solo hemos de utilizar la herramienta:

1 sudo certbot --nginx 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:

1 sudo certbot renew --dry-run sudo certbot renew --dry-run

La herramienta añadira la tarea programada en algún de los siguientes lugares:

1 2 3 / etc / crontab / / etc / cron. */* systemctl list-timers /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:



1 2 sudo docker exec -ti d345b65306ef cat \ / var / jenkins_home / secrets / initialAdminPassword sudo docker exec -ti d345b65306ef cat \ /var/jenkins_home/secrets/initialAdminPassword

Para localizar esta información, podemos ejecutar desde la consola de comandos:

En el siguiente paso se nos pregunta si queremos instalar los plugins recomendados:



Fuentes consultadas

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 aY esto es todo. Espero que esta entrada os sea de utilidad en algún momento.

Docker Hub Jenkins