Не удается создать потоки в конвейере Jenkins groovy

#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. «параллельный» тоже хорош, но просто любопытно сделать это заводным способом.