Saltar al contenido

Cómo configurar Jenkins con SSL El uso de un proxy inverso Nginx en Ubuntu 18.04

marzo 4, 2020

 

Introducción

Por defecto, Jenkins viene con su propio integrado en Winstone escucha del servidor web en el puerto 8080, que es conveniente para ponerse en marcha. Es también una buena idea, sin embargo, para asegurar Jenkins con SSL para proteger claves e información transmitidos a través de la interfaz web.

En este tutorial, se configurará Nginx como proxy inverso a las solicitudes de clientes directos a Jenkins.

Requisitos previos

Para empezar, necesitará lo siguiente:

  • Una Ubuntu 18.04 servidor configurado con un usuario que no sea root sudo y cortafuegos, siguiendo la guía de configuración inicial del servidor de Ubuntu 18.04.
  • Jenkins instalado, siguiendo los pasos de Cómo instalar Jenkins en Ubuntu 18.04 instalado
  • Nginx, siguiendo los pasos de Cómo instalar Nginx en Ubuntu 18.04 certificado
  • Un SSL para un dominio proporcionado por Cifrar Vamos. Siga Cómo proteger con Nginx Cifrar Vamos en Ubuntu 18.04 para obtener este certificado. Tenga en cuenta que se necesita un nombre de dominio registrado que es el propietario o control. Este tutorial se utilizará el nombre de dominio example.com en todas partes.

Paso 1 – Configuración de Nginx

En el prerrequisito tutorial Cómo proteger con Nginx Cifrar Vamos en Ubuntu 18.04, que configura Nginx para utilizar SSL en el archivo /etc
ginx/sites-available/example.com. Abrir este archivo para agregar la configuración de proxy inverso:

sudo nano /etc
ginx/sites-available/example.com

  • sudo nano /etc
    ginx/sites-available/example.com

En el bloque de servidor con los valores de configuración de SSL, añadir registros de acceso y de error Jenkins-específicos:

. . .
server {
. . .
# SSL Configuration
#
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
access_log /var/log
ginx/jenkins.access.log;
error_log /var/log
ginx/jenkins.error.log;
. . .
}

A continuación vamos a configurar la configuración del proxy. Ya que estamos enviando todas las peticiones a Jenkins, vamos a comentar la línea try_files por defecto, que de otro modo devolver un error 404 antes de que la solicitud llegue a Jenkins:

. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404; }
. . .

Ahora vamos a añadir la configuración de proxy, que incluyen: proxy_params

  • : el archivo / etc / nginx / proxy_params es suministrada por Nginx y asegura que la información importante, incluyendo el nombre de host, el protocolo de la solicitud del cliente y la dirección IP del cliente, es retenida y disponible en los archivos de registro.
  • PROXY_PASS: Esto establece el protocolo y la dirección del servidor proxy, que en este caso será el servidor Jenkins accede a través de localhost en el puerto 8080.
  • proxy_read_timeout: Esto permite un incremento de 60 segundos por defecto de Nginx a los Jenkins-recomendada 90 segundo valor.
  • proxy_redirect: Esto asegura que las respuestas se vuelven a escribir correctamente para incluir el nombre de host adecuado.

Asegúrese de sustituir el nombre de dominio de seguridad SSL para example.com en la línea proxy_redirect a continuación:

Location /
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include /etc
ginx/proxy_params;
proxy_pass http://localhost:8080;
proxy_read_timeout 90s;
# Fix potential "It appears that your reverse proxy setup is broken" error.
proxy_redirect http://localhost:8080 https://example.com;

Una vez que haya realizado estos cambios, guarde el archivo y salga del editor. Vamos a mantenerse fuera de reiniciar Nginx hasta después hemos configurado Jenkins, pero podemos probar nuestra configuración ahora:

sudo nginx -t

  • sudo nginx -t

Si todo está bien, el comando devolverá:

Outputnginx: the configuration file /etc
ginx
ginx.conf syntax is ok
nginx: configuration file /etc
ginx
ginx.conf test is successful

Si no se , corregir los errores reportados hasta que pase la prueba.

Nota: Si desconfigurar la PROXY_PASS (mediante la adición de una barra inclinada, por ejemplo), obtendrá algo similar a lo siguiente en su página de configuración Jenkins .

Si aparece este error, compruebe su configuración y PROXY_PASS proxy_redirect en la configuración de Nginx.

Paso 2 – Configuración de Jenkins

Para Jenkins para trabajar con Nginx, tendrá que actualizar la configuración de Jenkins para que el servidor Jenkins escucha sólo por la interfaz localhost en lugar de en todas las interfaces (0.0.0.0). Si Jenkins escucha en todas las interfaces, que es potencialmente accesible en su puerto original, sin encriptar (8080).

Let

de modificar el etc / default / Jenkins archivo / configuración para hacer estos ajustes:

sudo nano /etc/default/jenkins

  • sudo nano / etc / default / Jenkins

Busque la línea JENKINS_ARGS y añadir –httpListenAddress = 127.0.0.1 a los argumentos existentes :

. . .
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"

guarde y salga del archivo.

Para utilizar las nuevas opciones de configuración, reinicie Jenkins:

sudo systemctl restart jenkins

  • sudo systemctl reinicio Jenkins

Desde systemctl no mostrar la salida, comprobar el estado:

sudo systemctl status jenkins

  • sudo systemctl estado Jenkins

debería ver el activa (salido) de estado en la línea activa:

Output● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Mon 2018-07-09 20:26:25 UTC; 11s ago
Docs: man:systemd-sysv-generator(8)
Process: 29766 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)
Process: 29812 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)

Reiniciar Nginx:

sudo systemctl restart nginx

  • sudo systemctl reinicio nginx

Compruebe el estado:

sudo systemctl status nginx

  • sudo systemctl estado nginx

Output● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system
ginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2018-07-09 20:27:23 UTC; 31s ago
Docs: man:nginx(8)
Process: 29951 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run
ginx.pid (code=exited, status=0/SUCCESS)
Process: 29963 ExecStart=/usr/sbin
ginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 29952 ExecStartPre=/usr/sbin
ginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 29967 (nginx)

Con ambos servidores reiniciado, usted debe la posibilidad de visitar el dominio por medio de HTTP o HTTPS. peticiones HTTP, será redirigido a HTTPS, y el sitio Jenkins serán servidos de forma segura.

Paso 3 – Prueba de la configuración

Ahora que ha activado el cifrado, se puede probar la configuración reiniciando la contraseña administrativa. Vamos a empezar visitando el sitio a través de HTTP para verificar que se puede llegar a Jenkins y se redirigen a HTTPS.

En su navegador web, introduzca http://example.com, sustituyendo su dominio para example.com. Después de presionar ENTER, la URL debe comenzar con https y la barra de direcciones debe indicar que la conexión es segura.

Puede introducir el nombre de usuario administrativo que ha creado en Cómo instalar Jenkins en Ubuntu 18.04 en el campo usuario y la contraseña que ha seleccionado en el campo contraseña.

Una vez iniciada la sesión, puede cambiar la contraseña para asegurarse de que es seguro.

Haga clic en su nombre de usuario en la esquina superior derecha de la pantalla. En la página de perfil principal, seleccione Configurar de la lista en el lado izquierdo de la página:

Esto le llevará a una nueva página, donde se puede introducir y confirmar una nueva contraseña:

confirme la nueva contraseña haciendo clic en Guardar . Ahora puede utilizar la interfaz web segura Jenkins.

Conclusión

En este tutorial, se configura Nginx como proxy inverso a Jenkins incorporada en el servidor web para asegurar sus credenciales y otra información transmitida a través de la interfaz web. Ahora que Jenkins es seguro, usted puede aprender cómo configurar una tubería de integración continua que cambia automáticamente el código de prueba. Otros recursos a tener en cuenta si usted es nuevo a Jenkins son tutorial del proyecto Jenkins “Creación de su primera Pipeline” o la biblioteca de complementos aportados por la comunidad.