Aumenta il timeout di accesso di Jenkins


86

Qualcuno sa come aumentare la finestra di timeout prima che Jenkins disconnetta un utente? Sto cercando di aumentarlo a 1 giorno o giù di lì.

Lavoro dentro e fuori Jenkins tutto il giorno e continuiamo a essere disconnesso tra l'esecuzione di lavori. In aggiunta a questa frustrazione, la casella di controllo "rimani connesso" sembra non funzionare neanche.


Quale versione di Jenkins? C'era un bug di Jenkins relativo ai cookie di accesso: issues.jenkins-ci.org/browse/JENKINS-16278 . Anche se non è applicabile alla tua versione, vale la pena leggere i commenti sulla risoluzione dei problemi in quel bug. Questo bug rileva anche che il timeout predefinito del cookie di accesso è di 14 giorni.
Dave Bacher

@DaveBacher stiamo eseguendo la v1.567 e sicuramente non riceviamo 14 giorni di accesso :)
Ray

@DaveBacher Ho testato il ricordami con una rapida uccisione del client del browser dopo aver effettuato l'accesso per 10 minuti in Chrome e Firefox e funziona, quindi penso che il logout sia stato forzato e rompa il ricordo di me.
Ray

Risposte:


73

Jenkins utilizza Jetty e il timeout predefinito di Jetty è di 30 minuti . Questo è indipendente dalle impostazioni di autenticazione: io uso Active Directory ma è ancora questa impostazione che influisce sui timeout.

È possibile sovrascrivere il timeout passando un argomento --sessionTimeout=<minutes>allo script di inizializzazione di Jenkins o -DsessionTimeout=<minutes>al file .war. Per esempio:

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

In alternativa, puoi modificare Jenkins <jenkinsHome>/.jenkins/war/WEB-INF/web.xmle aggiungerlo in modo esplicito:

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

Secondo i documenti di Oracle, puoi impostarlo su 0 per disabilitare del tutto i timeout.

Per scoprire il valore corrente per i timeout, puoi utilizzare la console Groovy fornita in Jenkins:

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

Nel mio caso, questo mostra Result: 30.


2
Sembra che l'argomento dovrebbe essere --sessionTimeout=<minutes>(nota il segno di uguale).
Rob I

3
dov'è la WEB-INFdirectory?
bubakazouba

4
@bubakazouba Sul mio sistema Debian, è in / var / cache / jenkins / war /. Su Windows 7, è in C: \ Program Files (x86) \ Jenkins \ war \
Sir Jane

2
Non sono riuscito a far funzionare DsessionTimeout, ma sessionTimeout funzionava.
Elijah Lynn

2
A partire da Jenkins 2.107.2, l'impostazione di questo valore da sola non è sufficiente. Si prega di controllare il commento di @jhuffaker su questa domanda.
Fholst

30

A partire dalla versione 2.107.2 di Jenkins ti consigliamo di includere sessionEviction

Ad esempio, per mantenere le persone connesse per 24 ore e 12 ore di inattività:

--sessionTimeout=1440 --sessionEviction=43200

Se non specifichi sessionEviction, le persone che chiudono la scheda verranno disconnesse dopo 30 minuti.


2
La corrente sessionTimeoutpuò essere controllata nella console groovy con Stapler.getCurrentRequest().getSession().getMaxInactiveInterval() / 60. Sai come ottenere / impostare sessionEvictionnella console groovy?
wim

10
Puoi confermare il tempo di inattività dello sfratto in questo modo: import org.kohsuke.stapler.Stapler; sess = Stapler.getCurrentRequest (). getSession (); printf ("sessionTimeout:% d secondi \ n", sess.getMaxInactiveInterval ()); printf ("sessionEviction:% d secondi \ n", sess.getSessionHandler (). getSessionCache (). getEvictionPolicy ());
kmaehashi

3
Grazie! Questo mi tormenta da oltre un anno e --sessionEvictionfino ad ora non mi ero mai imbattuto nell'argomento.
richid

Perfetto, questo spiega perché il timeout della sessione non sembra fare nulla da solo.
insideClaw

12

A partire dalla 1.528 è possibile utilizzare il --sessionTimeout <minutes>parametro all'avvio di jenkins tramite uno script di inizializzazione. Se inizi la guerra, passa-DsessionTimeout=<minutes>

Aggiornamento per 1.6

Se si passa come arg usa --sessionTimeout=<minutes>


Questo è il mio processo Jenkins. Ma il timeout è ancora inferiore a 10 minuti. Cosa c'è che non va? "java -Dcom.sun.akuma.Daemon = daemonizzato -Djava.awt.headless = true -Xmx6144m -Xms2048m -XX: MaxPermSize = 512m -XX: + CMSClassUnloadingEnabled -XX: + UseConcMarkSweepGC -Dhudson.diyChunking = false -HOME / 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

Sembra che tu stia lanciando la guerra. Prova a passare-DsessionTimeout=600
cesar

2
Sembra che l'argomento per jenkins 1.6 dovrebbe essere --sessionTimeout=<minutes>(notare il segno di uguale).
Rob I

1
Sì, hai ragione. L'utilizzo per 1.628 mostra Usage: java -jar jenkins.war [--option=value] [--option=value]Grazie!
cesar

11

sembra anche possibile impostarlo usando la console groovy:

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

Ma immagino che sarà disponibile solo per la sessione corrente


1
Ho usato questo approccio e passato zero nel metodo per disabilitare i timeout della sessione per la mia sessione corrente.
jstricker

Ha funzionato alla grande per la sessione corrente. Esiste un modo per modificare queste impostazioni per tutte le sessioni utilizzando la console Groovy?
Yuri Brovman

9

Per Ubuntu:

nano /etc/default/jenkins

Aggiungi a JENKINS_ARGS alla fine del file:

JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --sessionTimeout=1440 --sessionEviction=43200"

1
Eccellente, l'unica risposta che ho visto sull'argomento per dire anche dove devono essere applicati quei parametri. Questo può essere verificato con il codice di @ kmaehashi sopra.
insideClaw

4

Questa versione di Jenkins 1.567 ha anche l'opzione di abilitazione dell'aggiornamento automatico, quindi in qualche modo continua ad aggiornare la sessione e non vengo mai disconnesso. Per me funziona...


4

Sulla mia distribuzione Linux, questa impostazione può essere aggiunta a / etc / sysconfig / jenkins

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

Successivamente, riavviare con

sudo /etc/init.d/jenkins restart

0

Se Jenkins è in esecuzione come servizio Windows ( jenkins.exe), i parametri possono essere modificati nella jenkins.xmldirectory di installazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.