Sid
Sid

Reputation: 4997

Jenkins Pipeline Plugin execute two pipelines in parallel and make downstream pipeline wait

We are using Jenkins and the Pipeline plugin for CI/CD. We have two pipelines that we need to run parallel, and there is a downstream pipeline which should trigger ONLY if the two upstream pipelines both finish and are successful.

P1--
    | -- P3
P2-- 

Basically P3 should run only when P1 and P2 are finished and successful and not depend on just one of them.

Is there a way to achieve this? We are using 2.5 version of the plugin.

Upvotes: 1

Views: 1855

Answers (2)

burnettk
burnettk

Reputation: 14047

Since stages only run if previous stages run successfully, and since you can execute other pipelines via build, and since there is a magical instruction called parallel, I think this might do it:

pipeline {
  agent { label 'docker' }
  stages {
    stage("build_p1_and_p2_in_parallel") {
      steps {
        parallel p1: {
          build 'p1'
        }, p2: {
          build 'p2'
        }
      }
    }
    stage("build_p3_if_p1_and_p2_succeeded") {
      steps {
        build 'p3'
      }
    }
  }
}

Use the "Snippet Generator" embedded in your jenkins instance to figure out what the argument to build should be. If it's another pipeline at the same level as the top level Jenkinsfile, you could just reference it by job name. Caveat: I've used parallel, but never build within parallel, but it seems like it should work.

Upvotes: 4

yorammi
yorammi

Reputation: 6458

You can try and wrap the pipelines jobs with MultiJob plugin that can implement the logic that you require as 2 jobs inside a phase.

Upvotes: 1

Related Questions