How can I abort a running Pipeline build if a new one is started?

Issue

  • You have a Pipeline or Pipeline Multibranch job, and you want the running job to be aborted automatically if a new run is started. This can be useful if a new commit is made to the same branch of a project, and therefore you have no need to continue building the previous commit.

Environment

Resolution

Since version 2.42 of the Pipeline: Job plugin, the recommended approach is to use the option disableConcurrentBuilds(abortPrevious: true):

Declarative Pipeline:

pipeline {
  options {
    disableConcurrentBuilds(abortPrevious: true)
  }
  
  [...]
}

Scripted Pipeline:

node {
  properties([disableConcurrentBuilds(abortPrevious: true)])

  [...]
}

Pipeline: Job version earlier than 2.42

In earlier versions, this can be accomplished through some simple scripted Pipeline at the start of the Jenkinsfile / Pipeline script:

def buildNumber = env.BUILD_NUMBER as int
if (buildNumber > 1) milestone(buildNumber - 1)
milestone(buildNumber)

The outcome of this is that build #1 will create milestone1 in the project. While build #1 is running, if build #2 is started, it will create milestone1 and milestone2 in the project. Build #2 will immediately pass milestone1 and will therefore cause Build #1 to abort.

References

Have more questions?

0 Comments

Please sign in to leave a comment.