Issue
Please note: the question is based on the old, now called "scripted" pipeline format. When using "declarative pipelines", parallel blocks can be nested inside of stage blocks (see href="https://jenkins.io/blog/2017/09/25/declarative-1/" rel="nofollow noreferrer">Parallel stages with Declarative Pipeline 1.2).
I'm wondering how parallel steps are supposed to work with Jenkins workflow/pipeline plugin, esp. how to mix them with build stages. I know about the general pattern:
parallel(firstTask: {
// Do some stuff
}, secondTask: {
// Do some other stuff in parallel
})
However, I'd like to run couple of stages in parallel (on the same node, which has multiple executors), so I tried to add stages like this:
stage 'A'
// Do some preparation stuff
parallel(firstTask: {
stage 'B1'
// Do some stuff
}, secondTask: {
stage 'B2'
// Do some other stuff in parallel
})
stage 'C'
// Finalizing stuff
This does not work as expected. The "do stuff" tasks are executed in parallel, but the parallel stages end immediately and do not incorporate the stuff they should contain. As a consequence, the Stage View does not show the correct result and also does not link the logs.
Can I build different stages in parallel, or is the "parallel" step only meant to be used within a single stage?
Solution
You may not place the deprecated non-block-scoped stage
(as in the original question) inside parallel
.
As of JENKINS-26107, stage
takes a block argument. You may put parallel
inside stage
or stage
inside parallel
or stage
inside stage
etc. However visualizations of the build are not guaranteed to support all nestings; in particular
- The built-in Pipeline Steps (a “tree table” listing every step run by the build) shows arbitrary
stage
nesting. - The Pipeline Stage View plugin will currently only display a linear list of stages, in the order they started, regardless of nesting structure.
- Blue Ocean will display top-level stages, plus
parallel
branches inside a top-level stage, but currently no more.
JENKINS-27394, if implemented, would display arbitrarily nested stage
s.
Answered By - Jesse Glick
Answer Checked By - Katrina (JavaFixing Volunteer)