Zwiększ limit czasu logowania Jenkins

86

Czy ktoś wie, jak zwiększyć limit czasu, zanim Jenkins wyloguje użytkownika? Chcę go podnieść do 1 dnia lub więcej.

Pracuję w Jenkinsie przez cały dzień i ciągle wylogowuję się między kolejnymi pracami. Co więcej, pole wyboru „pozostań zalogowany” również nie działa.

Promień
źródło
Jaka wersja Jenkinsa? Wystąpił błąd Jenkinsa związany z plikami cookie logowania: Issues.jenkins-ci.org/browse/JENKINS-16278 . Nawet jeśli nie dotyczy Twojej wersji, warto przeczytać komentarze dotyczące rozwiązywania problemów w tym błędzie. Ten błąd wskazuje również, że domyślny limit czasu pliku cookie logowania wynosi 14 dni.
Dave Bacher
@DaveBacher korzystamy z wersji 1.567 i na pewno nie dostaniemy 14 dni logowania :)
Ray
@DaveBacher Przetestowałem zapamiętaj mnie z szybkim zabiciem klienta przeglądarki po 10 minutach logowania w chrome i firefox i działa, więc myślę, że wylogowanie jest wymuszone i łamie pamięć o mnie.
Ray

Odpowiedzi:

73

Jenkins używa Jetty, a domyślny limit czasu Jetty to 30 minut . Jest to niezależne od ustawień uwierzytelniania - używam usługi Active Directory, ale nadal to ustawienie wpływa na limity czasu.

Limit czasu można zmienić, przekazując argument --sessionTimeout=<minutes>do skryptu inicjującego Jenkins lub -DsessionTimeout=<minutes>do pliku .war. Na przykład:

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

Alternatywnie możesz edytować Jenkinsa <jenkinsHome>/.jenkins/war/WEB-INF/web.xmli dodać jawnie go ustawić:

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

Zgodnie z dokumentacją Oracle można ustawić to na 0, aby całkowicie wyłączyć limity czasu.

Aby poznać aktualną wartość limitów czasu, możesz użyć konsoli Groovy dostarczonej w Jenkins:

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

W moim przypadku to widać Result: 30.

Wilfred Hughes
źródło
2
Wygląda na to, że argument powinien być --sessionTimeout=<minutes>(zwróć uwagę na znak równości).
Rob I
3
gdzie jest WEB-INFkatalog?
bubakazouba
4
@bubakazouba W moim systemie Debian znajduje się w / var / cache / jenkins / war /. W systemie Windows 7 znajduje się w C: \ Program Files (x86) \ Jenkins \ war \
Sir Jane,
2
Nie udało mi się uruchomić DsessionTimeout, ale sesja sessionTimeout działała.
Elijah Lynn
2
Od wersji Jenkins 2.107.2 samo ustawienie tej wartości nie wystarczy. Sprawdź komentarz @jhuffaker do tego pytania.
Fholst,
30

Od wersji Jenkins 2.107.2 będziesz chciał dołączyć sessionEviction

Na przykład, aby utrzymać ludzi zalogowanych przez 24 godziny i 12 godzin bezczynności:

--sessionTimeout=1440 --sessionEviction=43200

Jeśli nie określisz sessionEviction, osoby, które zamkną kartę, zostaną wylogowane po 30 minutach.

jhuffaker
źródło
2
Prąd sessionTimeoutmożna sprawdzić w groovy konsoli za pomocą Stapler.getCurrentRequest().getSession().getMaxInactiveInterval() / 60. Czy wiesz, jak uzyskać / ustawić sessionEvictionw groovy konsoli?
wim
10
Możesz potwierdzić czas bezczynności eksmisji w następujący sposób: import org.kohsuke.stapler.Stapler; sess = Stapler.getCurrentRequest (). getSession (); printf ("sessionTimeout:% d sekund \ n", sess.getMaxInactiveInterval ()); printf ("sessionEviction:% d sekund \ n", sess.getSessionHandler (). getSessionCache (). getEvictionPolicy ());
kmaehashi
3
Dziękuję Ci! To dręczy mnie od ponad roku i do tej pory nigdy nie natknąłem się na ten --sessionEvictionargument.
richid
Idealnie, to wyjaśnia, dlaczego limit czasu sesji nie wydaje się działać sam.
insideClaw
12

Od wersji 1.528 możesz używać tego --sessionTimeout <minutes>parametru podczas uruchamiania jenkinsa za pomocą skryptu init. Jeśli zaczynasz wojnę, podaj-DsessionTimeout=<minutes>

Aktualizacja do wersji 1.6.0

Jeśli przekazujesz jako argument, użyj --sessionTimeout=<minutes>

cesar
źródło
To jest mój proces Jenkinsa. Ale nadal upływa czas poniżej 10 minut. Co jest nie tak? "java -Dcom.sun.akuma.Daemon = daemonized -Djava.awt.headless = true -Xmx6144m -Xms2048m -XX: MaxPermSize = 512m -XX: + CMSClassUnloadingEnabled -XX: + UseConcMarkSweepGC -Dhudson.diyChunkENK = false / 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
Wygląda na to, że rozpoczynasz wojnę. Spróbuj -DsessionTimeout=600
wejść
2
Wygląda na to, że argumentem do jenkinsa 1.6 powinien być --sessionTimeout=<minutes>(zwróć uwagę na znak równości).
Rob I
1
Tak, masz rację. Wykorzystanie dla 1.628 pokazuje Usage: java -jar jenkins.war [--option=value] [--option=value]dzięki!
cesar
11

wydaje się również możliwe ustawienie tego za pomocą groovy konsoli:

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

Ale myślę, że będzie dostępny tylko dla bieżącej sesji

Sven Keller
źródło
1
Użyłem tego podejścia i przekazałem zero do metody, aby wyłączyć limity czasu sesji dla mojej bieżącej sesji.
jstricker
To działało świetnie w bieżącej sesji. Czy istnieje sposób na zmianę tych ustawień dla wszystkich sesji przy użyciu konsoli Groovy?
Yuri Brovman
10

W przypadku Ubuntu:

nano /etc/default/jenkins

Dołącz do JENKINS_ARGS na końcu pliku:

JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --sessionTimeout=1440 --sessionEviction=43200"
RocketKittens
źródło
1
Doskonale, jedyna odpowiedź, jaką widziałem na ten temat, mówi również, gdzie te parametry mają być zastosowane. Można to zweryfikować za pomocą powyższego kodu @ kmaehashi.
insideClaw
4

Ta wersja Jenkinsa 1.567 ma również opcję włączania automatycznego odświeżania, więc w jakiś sposób odświeża sesję i nigdy się nie wylogowuję. Mi to pasuje...

Raghav Vaidhyanathan
źródło
4

W mojej dystrybucji Linuksa to ustawienie można dodać do / etc / sysconfig / jenkins

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

Następnie uruchom ponownie za pomocą

sudo /etc/init.d/jenkins restart
Steve Jones
źródło
0

Jeśli Jenkins działa jako usługa Windows ( jenkins.exe), parametry można edytować w jenkins.xmlkatalogu instalacyjnym.

vll
źródło