2017-04-03 165 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开始,一直推到粉丝听起来像喷气发动机,但那只是我。

就队列限制而言,它肯定会受到内存和磁盘的限制,但是我必须深入研究源代码以查看是否存在其他约束。