增加Jenkins登录超时


84

有谁知道在詹金斯注销用户之前如何增加超时窗口?我希望将其提高到1天左右。

我整天都在詹金斯工作,我们在两次工作之间一直注销。令人沮丧的是,“保持登录状态”复选框似乎也不起作用。


什么版本的詹金斯?有一个与登录Cookie相关的Jenkins错误:issue.jenkins-ci.org/browse/JENKINS-16278。即使它不适用于您的版本,也值得阅读该错误中的故障排除注释。该错误还指出默认的登录cookie超时为14天。
戴夫·巴赫

@DaveBacher我们正在运行v1.567,并且绝对没有获得14天的登录时间:)

@DaveBacher在chrome和firefox中登录10分钟后,我用快速杀死浏览器客户端的方式测试了“记住我”,它起作用了,所以我认为注销被迫破坏了“记住我”。

Answers:


71

Jenkins使用Jetty,Jetty的默认超时为30分钟。这与身份验证设置无关-我使用的是Active Directory,但仍然是影响超时的设置。

您可以通过将参数传递--sessionTimeout=<minutes>给Jenkins初始化脚本或-DsessionTimeout=<minutes>.war文件来覆盖超时。例如:

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

另外,您可以编辑Jenkins,<jenkinsHome>/.jenkins/war/WEB-INF/web.xml并添加显式设置:

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

根据Oracle的文档,您可以将其设置为0以完全禁用超时。

要找出超时的当前值,可以使用Jenkins中提供的Groovy控制台:

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

在我的实例中,显示为Result: 30


2
似乎参数应该是--sessionTimeout=<minutes>(请注意等号)。
Rob I

3
WEB-INF目录在哪里?
bubakazouba

4
@bubakazouba在我的Debian系统上,它在/ var / cache / jenkins / war /中。在Windows 7上,它位于C:\ Program Files(x86)\ Jenkins \ war \中
简爵士爵士(Sir Jane

2
我无法使DsessionTimeout工作,但确实使sessionTimeout工作。
伊利亚·林恩

1
从Jenkins 2.107.2开始,仅设置此值是不够的。请检查@jhuffaker对这个问题的评论。
Fholst

29

从Jenkins 2.107.2版开始,您需要包含sessionEviction

例如,让人们保持24小时和12小时不活动状态的登录状态:

--sessionTimeout=1440 --sessionEviction=43200

如果您未指定sessionEviction,则关闭选项卡的人将在30分钟后注销。


2
sessionTimeout可以使用groovy控制台检查电流Stapler.getCurrentRequest().getSession().getMaxInactiveInterval() / 60。您知道如何sessionEviction在groovy控制台中获取/设置吗?
WIM

10
您可以像这样确认驱逐闲置时间:import org.kohsuke.stapler.Stapler; sess = Stapler.getCurrentRequest()。getSession(); printf(“ sessionTimeout:%d秒\ n”,sess.getMaxInactiveInterval()); printf(“ sessionEviction:%d seconds \ n”,sess.getSessionHandler()。getSessionCache()。getEvictionPolicy());
kmaehashi

3
谢谢!这困扰了我一年多了,--sessionEviction直到现在我才从没发现过这种争论。
richid

完美,这说明了为什么会话超时本身似乎没有做任何事情。
内部爪子

12

--sessionTimeout <minutes>从1.528开始,您可以在通过init脚本启动jenkins时使用该参数。如果发动战争,请传递-DsessionTimeout=<minutes>

更新1.6

如果以arg形式传入 --sessionTimeout=<minutes>


这是我的詹金斯进程。但仍然会在10分钟内超时。怎么了?“ java -Dcom.sun.akuma.Daemon =守护进程-Djava.awt.headless = true -Xmx6144m -Xms2048m -XX:MaxPermSize = 512m -XX:+ CMSClassUnloadingEnabled -XX:+ UseConcMarkSweepGC -Dhudson.diyChunking = false -DJENKINS_HOME = /出口/詹金斯-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

看来您正在发动战争。尝试传入-DsessionTimeout=600
cesar,2015年

2
好像jenkins 1.6的参数应该是--sessionTimeout=<minutes>(请注意等号)。
罗伯一世

1
是的,你是对的。1.628的用法显示Usage: java -jar jenkins.war [--option=value] [--option=value]谢谢!
cesar 2015年

11

使用groovy控制台似乎也可以设置它:

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

但我想它将仅适用于当前会议


1
我使用了这种方法,并将零值传递给该方法以禁用当前会话的会话超时。
jstricker

这对于本届会议非常有效。是否可以使用Groovy控制台更改所有会话的这些设置?
Yuri Brovman

8

对于Ubuntu:

nano /etc/default/jenkins

附加到文件末尾的JENKINS_ARGS

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

1
优秀的,唯一的答案我见过的话题也说在那里这些参数将被应用。可以使用上面的@kmaehashi的代码进行验证。
内部爪子'19


3

在我的Linux发行版中,可以将此设置添加到/ etc / sysconfig / jenkins

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

随后,重新启动

sudo /etc/init.d/jenkins restart

0

如果Jenkins作为Windows服务(jenkins.exe)运行,则可以jenkins.xml在安装目录中编辑参数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.