Cómo configurar Jenkins con SSL detrás de Nginx en Ubuntu 20.04
Jenkins es una herramienta de automatización de código abierto para configurar toda la canalización de entrega de software: entrega continua. Esto permite a los desarrolladores administrar y controlar los procesos de entrega de software a lo largo de todo el ciclo de vida, como la creación, prueba e implementación de software de manera confiable.
Jenkins tiene una comunidad grande, vibrante y activa. Está escrito en Java. En general, Jenkins se ejecuta como una aplicación de servlet de Java independiente integrada. También es posible ejecutarlo en contenedores de servlet Java como Apache Tomcat o GlassFish.
En este tutorial, aprendemos cómo configurar Jenkins con SSL detrás de Nginx en Ubuntu 20.04.
requisitos previos
- Un servidor Ubuntu 20.04
- Un usuario con provisiones de sudo
- Mínimo 1 GB de RAM
- Oracle JDK 11 o posterior instalado.
Paso 1: Instale Jenkins en Ubuntu
El paquete de Jenkins disponible en el repositorio predeterminado de Ubuntu probablemente esté detrás de la última versión. Se recomienda instalar Jenkin desde el paquete de mantenimiento diseñado que se encuentra disponible en el repositorio oficial.
Primero agregaremos la clave del repositorio al sistema.
$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
Cuando escriba esta guía, el procedimiento instalará la versión 2.303.3
a Jenkins
A continuación, agreguemos el repositorio de paquetes a sources.list
expediente:
$ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
Deberíamos actualizar el caché del repositorio.
$ sudo apt update
Ahora puedes instalar Jenkins:
$ sudo apt install jenkins
Luego inicie el servicio
$ sudo systemctl start jenkins
Configuremos el servicio para que se inicie automáticamente con el servidor
$ sudo systemctl enable jenkins
Puedes consultar el estado del servicio
$ sudo systemctl status jenkins
Puede verificar la versión mirando el archivo /var/lib/jenkins/config.xml
$ cat /var/lib/jenkins/config.xml
<?xml version='1.1' encoding='UTF-8'?>
<hudson>
<disabledAdministrativeMonitors/>
<version>2.303.3</version>
...
...
</hudson>
Paso 2: Configuración de Nginx con certificado SSL
Ahora, dado que vamos a usar Nginx para la comunicación de proxy, primero debemos instalarlo
$ sudo apt install nginx
Ahora necesita copiar el certificado a la carpeta para usarlo. Asumiremos que ya tiene el certificado SSL.
Copiaremos el certificado.
$ sudo cp jenkins.domain.com.crt /etc/nginx/certs/jenkins.domain.com.crt
Luego copia las claves.
$ sudo cp jenkins.domain.com.key /etc/nginx/certs/jenkins.domain.com.key
Para evitar cualquier conflicto con la configuración predeterminada de Nginx, eliminaremos la configuración predeterminada de la sites-enabled
director
sudo rm /etc/nginx/sites-enabled/default
Ahora vamos a crear el archivo de configuración de Jenkins. Jenkins normalmente usa el puerto 8080 para ejecutarse, pero como estamos usando Nginx, escuchará en los puertos 80 y 443, luego con la información del nombre de dominio, enviará internamente la comunicación en el puerto 8080 para Jenkins.
La configuración que estableceremos forzará automáticamente todas las solicitudes HTTP a HTTPS
$ sudo vim /etc/nginx/sites-available/jenkins.conf
upstream jenkins.domain.com {
server SERVER_IP:8080;
}
server {
server_name jenkins.domain.com;
listen 80 ;
access_log /var/log/nginx/jenkins.log;
return 301 https://$host$request_uri;
}
server {
server_name jenkins.domain.com;
listen 443 ssl http2 ;
access_log /var/log/nginx/jenkins.log;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/jenkins.domain.com.crt;
ssl_certificate_key /etc/nginx/certs/jenkins.domain.com.key;
add_header Strict-Transport-Security "max-age=31536000";
location / {
proxy_pass http://jenkins.domain.com;
}
}
Además de la configuración de Jenkins Nginx, agregué algunos de los derivados de nginx necesarios. Puede usar y optimizar de acuerdo con los requisitos de su servidor web.
Ahora cree un token del archivo de configuración para habilitarlo
$ sudo ln -s /etc/nginx/sites-available/jenkins.conf /etc/nginx/sites-enabled/jenkins.conf
Ahora inicie el servicio Nginx
$ sudo systemctl start nginx
Luego habilítalo al inicio
$ sudo systemctl enable nginx
Ahora puedes probar tu configuración de Nginx
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Ahora reinicia el servicio Nginx para tener en cuenta la configuración
$ sudo systemctl restart nginx
Ahora abra los puertos 80 y 443 en su firewall:
$ sudo ufw allow 80,443/tcp
Además, asegúrese de abrir el puerto ssh antes de habilitar UFW, de lo contrario, puede perder su conexión ssh si algo sale mal.
$ sudo ufw allow 'OpenSSH'
Ahora habilite UFW si aún no
$ sudo ufw enable
Paso 3: Ir y configurar Jenkins
Ahora abra su navegador con la URL http://jenkins.domain.com y luego verá la página de Jenkins pidiéndole una contraseña
Para disponer de la contraseña, deberá visualizar el contenido del archivo que se indica
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
88ba484d8cff4150a90683a07c89ea7c
Luego pegue la contraseña y continúe con la página siguiente. Ahora tendrá la página que le pedirá que instale los complementos predeterminados o seleccione los que desea instalar. En nuestro caso, dejaremos los predeterminados.
Luego verás el proceso de instalación.
Ahora necesita crear el usuario administrador.
Ahora valide la URL de Jenkins.
Ahora puedes empezar a usar Jenkins
Conclusión
En este tutorial, aprendimos cómo configurar Jenkins con SSL detrás de Nginx en Ubuntu 20.04. Puede comenzar a configurar canalizaciones y trabajos de proceso de CI/CD.