Jenkins slave使用管道忽略系统定义的限制

时间:2017-05-31 11:40:19

标签: linux jenkins jenkins-plugins jenkins-pipeline

我正在尝试运行一个管道作业,在我在亚马逊上动态构建的从属机器上运行scala测试。

提供机器 - >在配置的机器上构建代码 - >运行测试

当我的测试开始时,几分钟后我点击“太多打开的文件”错误,我的工作就退出了。 我尝试改变奴隶机器的限制,但是当我通过Jenkins工作运行时,我所做的一切似乎都被忽略了。

注意:当我从奴隶机器手动运行相同的命令时,它就像魅力一样,我确实看到为我在系统上定义的jenkins用户正确定义了限制。

这就是我设置一切的方法(奴隶机器是CentOS 7.2)

作为root用户,我更改了/etc/security/limits.conf文件并添加了:

*  hard    nofile     100000
*  soft    nofile     100000
jenkins  hard    nofile     100000
jenkins  soft    nofile     100000

我还确保在/etc/security/limits.d/下没有任何内容可以覆盖这些值。 (我最初使用这些值创建了/etc/security/limits.d/30-jenkins.conf并没有帮助)

我确保/etc/pam.d/login有以下一行:

session    required   pam_limits.so

重新启动后,我确保从jenkins用户运行'ulimit -a'确实会显示新值。

我创建了一个简单的管道作业:

node('master') {
    stage('master-limits') {
        sh('ulimit -a')
    }
}
node('swarm') {
    stage('slave-limits') {
        sh('ulimit -a')
    }
}

运行时,我得到以下输出:

[Pipeline] stage
[Pipeline] { (master-limits)
[Pipeline] sh
00:00:00.053 [ulimit-test] Running shell script
00:00:00.305 + ulimit -a
00:00:00.306 time(seconds)        unlimited
00:00:00.306 file(blocks)         unlimited
00:00:00.306 data(kbytes)         unlimited
00:00:00.306 stack(kbytes)        8192
00:00:00.306 coredump(blocks)     0
00:00:00.306 memory(kbytes)       unlimited
00:00:00.306 locked memory(kbytes) 64
00:00:00.306 process              64111
00:00:00.306 nofiles              65536
00:00:00.306 vmemory(kbytes)      unlimited
00:00:00.306 locks                unlimited
00:00:00.306 rtprio               0

[Pipeline] stage
[Pipeline] { (slave-limits)
[Pipeline] sh
00:00:00.348 [ulimit-test] Running shell script
00:00:00.606 + ulimit -a
00:00:00.606 time(seconds)        unlimited
00:00:00.606 file(blocks)         unlimited
00:00:00.606 data(kbytes)         unlimited
00:00:00.606 stack(kbytes)        8192
00:00:00.606 coredump(blocks)     0
00:00:00.606 memory(kbytes)       unlimited
00:00:00.606 locked memory(kbytes) 64
00:00:00.606 process              257585
00:00:00.606 nofiles              4096
00:00:00.606 vmemory(kbytes)      unlimited
00:00:00.606 locks                unlimited
00:00:00.606 rtprio               0

从结果中可以看出,即使我将其更改为100000,对奴隶的限制仍显示为“4096”。

我的swarm插件作为服务运行并配置如下:

[Unit]
Description=Jenkins slave daemon
After=network.target

[Service]
User=jenkins
ExecStart=/usr/java/jdk1.8.0_112/bin/java -jar /var/lib/jenkins/swarm-client-3.3.jar -fsroot /var/lib/jenkins -username jenkins@jenkins.com -password * -name swarm -master http://jenkins.com -executors 1 -mode exclusive -labels swarm -disableSslVerification
ExecStop=/usr/bin/killall -w -s 2 java

[Install]
WantedBy=multi-user.target

我正在使用Jenkins 2.62和swarm插件来按需设置从属设备。 我在主服务器和从服务器上都使用JAVA 1.8.0_112。 该问题与基于Ubuntu的从站或基于CentOS的从站一致。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

在我开始阅读有关systemd init系统之前,这个问题也没有找到。它似乎尊重您在/etc/security/limits.conf文件中设置的任何限制

相反,您需要编辑systemd配置文件:

<div class="items">
  <div class="item">Item 1 with text</div>
  <div class="item">Item 2 with more text</div>
  <div class="item">Item 3 with some text</div>
  <div class="item">Item 4 without text</div>
  <div class="item">Item 5 lorem</div>
  <div class="item">Item 6 ipsum</div>
  <div class="item">Item 7 with lorem</div>
  <div class="item">Item 8 with ipsum</div>
</div>

在这里找到答案:https://serverfault.com/a/678861