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.