No, if you plan to use shared variables across parallel steps you should 
use Java types that are thread safe, if not you will have random/weird 
results. I have several pipelines that uses a map to store results in 
parallel steps 

El sábado, 30 de octubre de 2021 a las 14:18:29 UTC+2, abstrakta escribió:

> Hi, Jenkins friends.I wish that I'm in the right place that post these 
> Jenkins usage question.
>
> I find that the Scriped Pipeline parallel works like threads.Unlike the 
> Declarative Pipeline parallel,the Scriped Pipeline parallel just use one 
> executor.Closure in parallel parameters works like a thread.
> My question is:
>
> 1.Does Jenkins garantee the data thread safety of parallel closure 
> internally?
>
> 2.Does I need to care about the thread safety of the commands that 
> executes in scriped parallel closure?
>
> 3.Is there any limit of usage in the commands that executes in 
> parallel?Can I use nested scripted parallel? Why the documentation of 
> Declarative Pipeline parallel in Pipeline Syntax reference says that "Note 
> that a stage must have one and only one of steps, stages, parallel, or 
> matrix. It is not possible to nest a parallel or matrix block within a 
> stage directive if that stage directive is nested within a parallel or 
> matrix block itself."
>
> I test some nested Pipeline code that might cause thread race condition 
> many times.Jekins always give the right answer that shared data is modified 
> correctly.Is this thread safety garanteed in the design of Jenkins parallel 
> directive?
>
> Pipeline code like this:
>
> pipeline{
>     agent any
>     stages
>     {
>         stage('Parallel BuiLd') {
>             steps {
>                 script {
>                     def i = 0
>                     def data = 0
>                     def builds = [:]
>                     stash name: 'src', include: 'src/**'
>                     //generate 1000 parallel block
>                     for (i = 0; i<1000; i++) {
>                         // make the Map of Closure
>                         builds["$i"] = {
>                             //modify shared data, need thread mutex lock?
>                             data++
>                             //unstash or other command, need thread mutex 
> lock?
>                             unstah name: 'src'
>                             def tests = [:]
>                             // ... generate tests Map
>                             // Can I use nested parallel?
>                             parallel tests
>                         }
>                     }
>                     parallel builds
>                     println data //It does always print 1000
>                 }
>             }
>         }
>     }
> }
>
> The variable data is always modified to 1000. So Jenkins garantee the 
> thread safety of parallel?
>

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/0712b8c5-42dc-439f-a017-2a5ca45ad1e9n%40googlegroups.com.

Reply via email to