向Jenkins构建队列添加15K任务

时间:2017-04-03 10:42:13

标签: jenkins groovy build queue parameterized

我有一台Jenkins服务器,附带了大约50个奴隶。 我试图对Jenkins Build Queue进行一些压力测试,因为我还没有找到任何关于它的文档。

我只有一步的简单参数化作业,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次。 起初我尝试从命令行使用Jenkins 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任务,所以我杀死了循环并清除了Jenkins构建队列。

我的第二次尝试是使用另一个触发这个&#39; TEST_SIMPLE&#39;通过使用系统groovy脚本并调用&#39; job.scheduleBuild&#39; API。它目前运行1.5小时,仅提交了15K中的8K任务。

似乎只有当奴隶从队列中取出一个

时才会将任务添加到队列中

这项工作的目的是为我们的测试套件替换一个非常旧的执行器/调度程序,它包含许多测试(~15K)并且我使用Jenkins进行POC,因为我们已经将它用于我们的构建并运行它旧遗嘱执行人。

所以我的问题是: 1.构建队列的大小是否有限制? 2.有没有办法快速提交这么多请求?

感谢。

1 个答案:

答案 0 :(得分:0)

如果我理解你的帖子你想知道:

  1. 构建队列是否有限制?
  2. 如何快速向Jenkins提交大量请求?
  3. 让我先回答第二个问题。要更快地提交请求,您可以将并行xargscurl一起使用。这将允许您使用多个线程来提交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命令使用变量名称&#39; cnt&#39;将参数一次(-n 1)传递给curl。 (-I cnt)并行(-P 10有10个主题)。

    根据您用于生成负载的计算机上的处理器数量,您可以使用非常多的线程。过高,当线程争夺处理器时,您产生负载的能力将下降。在大多数现代笔记本电脑上,我会从50开始推动,直到风扇听起来像喷气发动机,但那就是我。

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