Добавление 15К задач в очередь сборки Jenkins

У меня есть сервер 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

Я хотел бы выполнить это задание 15 тысяч раз. Сначала я попытался использовать 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.

Второй моей попыткой было использовать другое задание, которое запускает это задание TEST_SIMPLE, используя системный Groovy скрипт и вызывая API job.scheduleBuild. В настоящее время он работает 1,5 часа и отправил только 8K задач из 15K.

Кажется, что задачи добавляются в очередь только тогда, когда ведомый забирает одну из очереди

Цель этих усилий - заменить очень старый исполнитель / диспетчер для нашего набора тестов, который содержит много тестов (~ 15 КБ), и я выполняю POC с Jenkins, потому что мы уже используем его для наших сборок и для запуска этого старого исполнителя.

Итак, мои вопросы: 1. Есть ли ограничение на размер очереди сборки? 2. Есть ли способ быстро отправить такое количество запросов?

Спасибо.


person sagi    schedule 03.04.2017    source источник


Ответы (1)


Если я правильно понял ваш пост, вы хотели бы знать:

  1. Есть ли ограничение на очередь сборки?
  2. Как я могу быстро отправить большое количество запросов Дженкинсу?

Позвольте мне сначала ответить на второй вопрос. Чтобы отправлять запросы быстрее, вы можете использовать параллельное xargs с curl. Это позволит вам использовать несколько потоков для отправки ваших 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 передает аргументы по одному (-n 1) в curl, используя имя переменной 'cnt' (-I cnt) параллельно (-P 10 с 10 потоками).

В зависимости от количества процессоров на машине, которую вы используете для создания нагрузки, вы можете использовать очень большое количество потоков. Если подняться слишком высоко, ваша способность генерировать нагрузку упадет, поскольку потоки будут конкурировать за процессор. На большинстве современных ноутбуков я бы начал с 50 и толкал его до тех пор, пока вентиляторы не стали звучать как реактивные двигатели, но это только я.

Что касается лимита очереди, он определенно будет ограничен памятью и диском, но мне придется покопаться в источнике, чтобы увидеть, есть ли другие ограничения.

person George S    schedule 26.04.2017