#multithreading #jenkins #jenkins-pipeline #jenkins-groovy
#многопоточность #дженкинс #jenkins-конвейер #jenkins-groovy
Вопрос:
Я хочу запустить несколько потоков в моем конвейере groovy. Вот мой конвейер
node{
List<Thread> cleanupThreads = new ArrayList<>(100);
"""1 2 3 4 5 6""".split().each{
def th = new Thread({
Random rand = new Random()
def wait = (long)(rand.nextDouble() * 1000)
this.sleep wait
println "Running Thread ${this.getName()}"
})
cleanupThreads.add(th)
}
cleanupThreads.each {it.start() }
cleanupThreads.each {it.join() }
}
Когда я запускаю его, я не вижу никакой строки вывода «Running Thread $ {this.getName ()}» в консоли
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/test_jobs/multithreaded_groovy_pipeline
[Pipeline] {
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Есть идеи, что здесь не так? Поддерживает ли конвейер Jenkins многопоточность?
Ответ №1:
Я не уверен, почему вы хотите закодировать функциональность groovy multithread в скрипт конвейера, что нежелательно. Если вы хотите запускать разные задания параллельно, вы можете использовать функциональность параллельного этапа. Пожалуйста, найдите приведенный ниже пример
pipeline {
agent any
stages {
stage ("Test Stage"){
steps {
parallel(
job1: {
echo "Inside 1st Job"
},
job2: {
echo "Inside 2nd Job"
},
job3: {
echo "Inside 3rd Job"
}
)
}
}
}
}
Вывод
Комментарии:
1. На самом деле я заинтересован в выполнении многопоточности в конвейере Jenkins. «параллельный» тоже хорош, но просто любопытно сделать это заводным способом.