Я использую что-то вроде этого для параллельного запуска тестов:
stage('Test') {
steps {
script {
testing_closures = [one: { print("staring one"); sleep 10; print("finishing one") },
two: { print("staring two"); sleep 10; print("finishing two") },
three: { print("staring three"); sleep 10; print("finishing three") },
four: { print("staring four"); sleep 10; print("finishing four") },
five: { print("staring five"); sleep 10; print("finishing five") },
six: { print("staring six"); sleep 10; print("finishing six") }]
parallel(testing_closures)
}
}
}
Основная цель - ограничить эти закрытия - я не хочу, чтобы все шесть из них выполнялись одновременно - только по три за раз. И я хочу иметь возможность запустить еще одну сборку этого, которая также будет запускать все эти закрытия, но только три одновременно.
Я думал об использовании для этого узлов - т.е. обертыванием каждого замыкания в блоке node {}:
one: { node { print("staring one"); sleep 10; print("finishing one") } }
Работает нормально, пока я использую главный узел и ограничиваю исполнителей до 4 (1 для основного задания, 3 для одновременных шагов узла {}).
К сожалению, мне нужно, чтобы исполнители главного узла были доступны для других заданий (и других сборок рассматриваемого задания), поэтому я не могу их ограничивать.
Единственное решение, которое я мог придумать, - это использовать Lockable Resources следующим образом:
Динамически создавать 3 блокируемых ресурса с помощью
LockableResourcesManager::createResourceWithLabel()
с уникальными для сборки меткамиЗакрепите их этикеткой на всех крышках
Закрытия будут ждать завершения друг друга, и на данный момент только 3 будут запущены.
... а теперь я застрял. Я не нашел способа удалить ресурсы. Я обнаружил только открытую ошибку для очень похожей проблемы. РЕДАКТИРОВАТЬ: я создал запрос на его улучшение.
Даже если существует метод удаления ресурсов, это решение выглядит грязным и добавляет ненужные ресурсы, которые могут не очиститься в случае сбоя.
Итак - как мне достичь своей цели? Есть ли способ дросселировать параллельный шаг?