我想運行一個管道作業,我在亞馬遜上動態構建的奴隸機器上運行scala測試。詹金斯奴隸使用管道忽略系統定義的限制
提供一臺機器 - >建立供應機器上的代碼 - >運行測試
當我的測試開始,一兩分鐘後,我打了「打開的文件太多」錯誤和我的工作,退出。 我試圖改變奴隸機器上的限制,但我做的每件事似乎都會在我通過Jenkins作業運行時被忽略。
注意:當我從子機手動運行相同的命令時,它就像一個魅力一樣,我的確看到,我爲系統定義的jenkins用戶正確定義了極限。
這是我如何設置一切(子機是CentOS的7.2)
作爲根,我已經改變了/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
你可以從結果看,在奴隸的限制是仍然顯示爲「4096」,即使我已將其更改爲100000.
我的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 [email protected] -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的slave或基於CentOS的slave相一致。
我錯過了什麼嗎?