2017-04-03 46 views
1

我有一個連接了約50個從站的Jenkins服務器。 我想對Jenkins構建隊列做一些壓力測試,因爲我還沒有找到關於它的任何文檔。將15K任務添加到Jenkins構建隊列

我只有一個簡單的參數化作業,BRANCH和COUNT是作業參數。工作在10到30秒之間隨機休息:

#bash 

RESULT="/path/to/results_dir/$BRANCH/$BUILD_ID.txt" 
SEC=$(shuf -i10-30 -n1) 
sleep $SEC 
echo -e "$NODE_NAME\t$BUILD_TAG\t$SEC\t$COUNT" > $RESULT 

我想運行這個工作15K次。 起初,我試圖從命令行中使用詹金斯REST API:

for c in $(seq 1 15000); do curl -X POST http://<server ip>:8080/job/TEST_SIMPLE/buildWithParameters --data-urlencode "token=TEST" --data-urlencode "BRANCH=<branch name>" --data-urlencode "COUNT=${c}"; done 

但已提交只有4K工作一個小時後,所以我殺了循環和淨化詹金斯建立隊列。

我第二次嘗試使用另一個作業,通過使用系統groovy腳本並調用'job.scheduleBuild'API來觸發此'TEST_SIMPLE'作業。它目前運行了1.5小時,並且只提交了15K中的8K任務。

看來只能當奴隸需要一個從隊列

這項工作的目的是要取代一個非常古老的執行/調度我們的測試套件,包含了許多許多的測試(即任務添加到隊列〜15K),並且我和詹金斯一起做POC,因爲我們已經將它用於我們的構建並運行這個老執行者。

所以我的問題是: 1.是否有構建隊列的大小限制? 2.有沒有辦法提交這麼多的請求非常快?

謝謝。

回答

0

如果我正確理解您的文章,你想知道:

  1. 是否有構建隊列的限制?
  2. 如何快速向Jenkins提交大量請求?

讓我先回答第二個問題。要更快地提交請求,您可以使用與curl並行的xargs。這將允許您使用多個線程提交curl請求。

seq 1 20 | xargs -n 1 -P 10 -I cnt curl -X POST http://<server ip>:8080/job/TEST_SIMPLE/buildWithParameters --data-urlencode "token=TEST" --data-urlencode "BRANCH=<branch name>" --data-urlencode "COUNT=cnt" 

xargs -n 1 -P 10 -I cnt命令傳遞並行使用變量名 'CNT'(-I cnt)(-P 10與10個線程)在時間(-n 1)至curl參數之一。

根據用於生成負載的機器上的處理器數量,可以使用非常多的線程數。由於線程競爭處理器,因此你的能力太高,生成負載的能力也會下降。在大多數現代筆記本電腦上,我會從50開始,一直推到粉絲聽起來像噴氣發動機,但那只是我。

就隊列限制而言,它肯定會受到內存和磁盤的限制,但是我必須深入研究源代碼以查看是否存在其他約束。

相關問題