Я использую Jenkins с декларативным конвейером. У меня есть машина Jenkins с 8 ядрами, выполняющими любое количество шагов (скажем, 20) параллельно. Проблема в том, что слишком много задач выполняются параллельно, а некоторые тесты не выполняются из-за проблем с тайм-аутом.
Мне нужен способ, чтобы Дженкинс выполнил 20 тестов параллельно, но только 8 одновременно. Таким образом, сначала я сделаю более длинные шаги, а затем более быстрые. Как только он завершает один из более длинных шагов, он должен немедленно начать следующий, пока остальные 7 еще работают. Примерно так, но только по 8 за раз:
steps {
parallel(
runtest1:
{
dostep()
},
runtest2:
{
dostep()
},
runtest3:
{
dostep()
},
runtest4:
{
dostep()
},
runtest5:
{
dostep()
},
runtest6:
{
dostep()
},
runtest7:
{
dostep()
},
runtest8:
{
dostep()
},
runtest9:
{
dostep()
}
runtest10:
{
dostep()
},
runtest11:
{
dostep()
},
runtest12:
{
dostep()
},
runtest13:
{
dostep()
},
runtest14:
{
dostep()
},
runtest15:
{
dostep()
},
runtest16:
{
dostep()
},
runtest17:
{
dostep()
},
runtest18:
{
dostep()
},
runtest19:
{
dostep()
},
runtest20:
{
dostep()
}
)
}
}
Сегодня с параллельным () он будет запускать все тесты только тогда, когда он будет сделан со всем, он go перейдет на следующий этап, на котором он будет выполните следующие параллельные шаги.