JR
Size: a a a
JR
Z
while ( (status != 'true') || (count < 100) ) {...}
II
&&
жеZ
II
Z
t
t
t
II
t
t
II
u
u
t
u
class ShareObj{
def testsForExecution // ArrayList<Autotest>
Object listLock
ShareObj() {
testsForExecution = []
listLock = new Object[0]
}
}
@NonCPS
def getTestForExecution(def so) {
synchronized(so.listLock) {
def tests = so.testsForExecution.findAll{t -> t.used == false} // ArrayList<Autotest>
if (tests.size() > 0) {
// Тут можно всякие опции использовать
//def test = tests.find {t -> t.option == option} // Autotest
//test = test != null ? test : tests.find {t -> return true}
def test = tests.find {t -> return true}
if (test != null) {
test.used = true
return test
}
}
return null
}
}
@NonCPS
def sortAutotestsArr(def arr) {
return arr.sort{-it.weight}
}
u
echo 'Выполнение автотестов'
echo("Список тестов для исполнения: ${tests}")
ShareObj so = new ShareObj()
def testsForExecutionList = [тут ваш список]
so.testsForExecution = sortAutotestsArr(so.testsForExecution)
def parallelTasks = [:]
def testDistribution = [:]
for (int i = 0; i < reservedAgents.size(); i++) {
def agent = reservedAgents[i]
parallelTasks["Выполнение тестов на агенте ${agent.name}"] = {
while (true) {
testDistribution["${agent.name}"] = getTestForExecution(so)
if (testDistribution["${agent.name}"] == null) break
println("Выдаем на выполнение тест ${testDistribution["${agent.name}"].name}")
runTestOnHost(cerediraTessUrl, cerediraTessCreds, agent, project, testDistribution["${agent.name}"],
testsPath, testStand, pathToJenkinsShare, influxEnabled, runType
)
}
agentsUnlock(cerediraTessUrl, cerediraTessCreds, reservedAgents, BUILD_URL)
reservedAgents.remove(agent)
}
}
parallel parallelTasks
u
t