Aumente el tiempo de espera de inicio de sesión de Jenkins

84

¿Alguien sabe cómo aumentar la ventana de tiempo de espera antes de que Jenkins cierre la sesión de un usuario? Estoy buscando aumentarlo a 1 día más o menos.

Trabajo dentro y fuera de Jenkins todo el día y seguimos desconectando entre trabajos. Sumado a esta frustración, la casilla de verificación 'permanecer conectado' tampoco parece funcionar.

Rayo
fuente
¿Qué versión de Jenkins? Hubo un error de Jenkins relacionado con las cookies de inicio de sesión: issues.jenkins-ci.org/browse/JENKINS-16278 . Incluso si no es aplicable a su versión, vale la pena leer los comentarios de solución de problemas en ese error. Ese error también señala que el tiempo de espera predeterminado de las cookies de inicio de sesión es de 14 días.
Dave Bacher
@DaveBacher estamos ejecutando v1.567 y definitivamente no vamos a tener 14 días de inicio de sesión :)
Ray
@DaveBacher Probé el recordatorio con una eliminación rápida del cliente del navegador después de iniciar sesión durante 10 minutos en Chrome y Firefox y funciona, así que creo que el cierre de sesión se está forzando y se está rompiendo el recordatorio.
Ray

Respuestas:

71

Jenkins usa Jetty y el tiempo de espera predeterminado de Jetty es de 30 minutos . Esto es independiente de la configuración de autenticación: utilizo Active Directory, pero sigue siendo esta configuración la que afecta los tiempos de espera.

Puede anular el tiempo de espera pasando un argumento --sessionTimeout=<minutes>al script de inicio de Jenkins o -DsessionTimeout=<minutes>al archivo .war. Por ejemplo:

# Set the session timeout to 1 week
$ java -jar jenkins.war --sessionTimeout=10080

Alternativamente, puede editar Jenkins <jenkinsHome>/.jenkins/war/WEB-INF/web.xmly agregar establecerlo explícitamente:

<session-config>
  <!-- one hour -->
  <session-timeout>60</session-timeout>
</session-config>

De acuerdo con los documentos de Oracle, puede establecer esto en 0 para deshabilitar los tiempos de espera por completo.

Para averiguar el valor actual de los tiempos de espera, puede utilizar la consola Groovy proporcionada en Jenkins:

import org.kohsuke.stapler.Stapler;
Stapler.getCurrentRequest().getSession().getMaxInactiveInterval() / 60

En mi caso, esto se nota Result: 30.

Wilfred Hughes
fuente
2
Parece que el argumento debería ser --sessionTimeout=<minutes>(observe el signo igual).
Rob I
3
donde esta el WEB-INFdirectorio?
bubakazouba
4
@bubakazouba En mi sistema Debian, está en / var / cache / jenkins / war /. En Windows 7, está en C: \ Archivos de programa (x86) \ Jenkins \ war \
Sir Jane
2
No pude hacer funcionar DsessionTimeout, pero logré que sessionTimeout funcionara.
Elijah Lynn
1
A partir de Jenkins 2.107.2, establecer este valor por sí solo no es suficiente. Por favor, consulte el comentario de @jhuffaker sobre esta pregunta.
Fholst
29

A partir de la versión 2.107.2 de Jenkins, querrá incluir sessionEviction

Por ejemplo, para mantener a las personas conectadas durante 24 horas y 12 horas de inactividad:

--sessionTimeout=1440 --sessionEviction=43200

Si no especifica sessionEviction, las personas que cierran la pestaña se cerrarán después de 30 minutos.

jhuffaker
fuente
2
La corriente sessionTimeoutse puede verificar en la maravillosa consola con Stapler.getCurrentRequest().getSession().getMaxInactiveInterval() / 60. ¿Sabes cómo conseguir / configurar el sessionEvictionen la maravillosa consola?
wim
10
Puede confirmar el tiempo de inactividad del desalojo de la siguiente manera: import org.kohsuke.stapler.Stapler; sess = Stapler.getCurrentRequest (). getSession (); printf ("sessionTimeout:% d segundos \ n", sess.getMaxInactiveInterval ()); printf ("sessionEviction:% d segundos \ n", sess.getSessionHandler (). getSessionCache (). getEvictionPolicy ());
kmaehashi
3
¡Gracias! Esto me ha estado atormentando durante más de un año y nunca me había topado con la --sessionEvictiondiscusión hasta ahora.
richid
Perfecto, eso explica por qué el tiempo de espera de la sesión no parece hacer nada por sí solo.
insideClaw
12

A partir de 1.528, puede utilizar el --sessionTimeout <minutes>parámetro al iniciar jenkins mediante un script de inicio. Si comienza la guerra, pase-DsessionTimeout=<minutes>

Actualización para 1.6

Si pasa como un uso de arg --sessionTimeout=<minutes>

cesar
fuente
Este es mi proceso de Jenkins. Pero aún así, se agota en menos de 10 minutos. Que esta mal "java -Dcom.sun.akuma.Daemon = demonizado -Djava.awt.headless = verdadero -Xmx6144m -Xms2048m -XX: MaxPermSize = 512m -XX: + CMSClassUnloadingEnabled -XX: + UseConcMarkSweepGC -DOME = export / jenkins -jar /usr/lib/jenkins/jenkins.war --logfile = / var / log / jenkins / jenkins.log --webroot = / var / cache / jenkins / war --daemon --httpPort = 80 - -ajp13Port = 8009 --debug = 5 --handlerCountMax = 100 --handlerCountMaxIdle = 20 --sessionTimeout = 600 -Dorg.kohsuke.stapler.compression.CompressionFilter.disabled = true "
Baskar
Parece que está iniciando la guerra. Intente pasar-DsessionTimeout=600
cesar
2
Parece que el argumento de jenkins 1.6 debería ser --sessionTimeout=<minutes>(observe el signo igual).
Rob I
1
Sí, tienes razón. El uso de 1.628 muestra Usage: java -jar jenkins.war [--option=value] [--option=value]¡Gracias!
cesar
11

también parece posible configurarlo usando una consola maravillosa:

import org.kohsuke.stapler.Stapler;
Stapler.getCurrentRequest().getSession().setMaxInactiveInterval(TIME_IN_SECONDS)

Pero supongo que solo estará disponible para la sesión actual

Sven Keller
fuente
1
Utilicé este enfoque y pasé cero al método para deshabilitar los tiempos de espera de sesión para mi sesión actual.
jstricker
Esto funcionó muy bien para la sesión actual. ¿Hay alguna forma de cambiar esta configuración para todas las sesiones usando la consola Groovy?
Yuri Brovman
8

Para Ubuntu:

nano /etc/default/jenkins

Agregue a JENKINS_ARGS al final del archivo:

JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --sessionTimeout=1440 --sessionEviction=43200"
CoheteGatitos
fuente
1
Excelente, la única respuesta que he visto sobre el tema también dice dónde se aplicarán esos parámetros. Esto se puede verificar con el código de @ kmaehashi anterior.
insideClaw
4

Esta versión de Jenkins 1.567 también tiene la opción de habilitar la actualización automática, por lo que de alguna manera sigue actualizando la sesión y nunca me desconecto. Esto funciona para mi...

Raghav Vaidhyanathan
fuente
3

En mi distribución de Linux, esta configuración se puede agregar a / etc / sysconfig / jenkins

# Pass arbitrary arguments to Jenkins.
# Full option list: java -jar jenkins.war --help
#
JENKINS_ARGS="--sessionTimeout=480"

Posteriormente, reinicie con

sudo /etc/init.d/jenkins restart
Steve Jones
fuente
0

Si Jenkins se ejecuta como un servicio de Windows ( jenkins.exe), los parámetros se pueden editar jenkins.xmlen el directorio de instalación.

vll
fuente