2017-05-31 52 views
0

我想運行一個管道作業,我在亞馬遜上動態構建的奴隸機器上運行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相一致。

我錯過了什麼嗎?

回答

0

這個問題一直困擾着我,直到我開始閱讀有關systemd init系統。看來它榮譽不管你限制在/etc/security/limits.conf文件中設置

相反,你需要編輯systemd配置文件作爲這樣的:

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

[Service] 
User=jenkins 
LimitNOFILE=100000 
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 

找到了答案這裏:https://serverfault.com/a/678861