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.