Skip to content

Instantly share code, notes, and snippets.

@ftclausen
Created April 13, 2017 05:36
Show Gist options
  • Save ftclausen/8c46195ee56e48e4d01cbfab19c41fc0 to your computer and use it in GitHub Desktop.
Save ftclausen/8c46195ee56e48e4d01cbfab19c41fc0 to your computer and use it in GitHub Desktop.
Jenkins pipeline - An approach to get all commits since the last successful build.
// -*- mode: groovy -*-
// vim: set filetype=groovy :
node( 'some_node' ) {
stage( "Phase 1" ) {
sshagent( credentials: [ 'some_creds' ] ) {
checkout scm
def lastSuccessfulCommit = getLastSuccessfulCommit()
def currentCommit = commitHashForBuild( currentBuild.rawBuild )
if (lastSuccessfulCommit) {
commits = sh(
script: "git rev-list $currentCommit \"^$lastSuccessfulCommit\"",
returnStdout: true
).split('\n')
println "Commits are: $commits"
}
}
}
}
def getLastSuccessfulCommit() {
def lastSuccessfulHash = null
def lastSuccessfulBuild = currentBuild.rawBuild.getPreviousSuccessfulBuild()
if ( lastSuccessfulBuild ) {
lastSuccessfulHash = commitHashForBuild( lastSuccessfulBuild )
}
return lastSuccessfulHash
}
/**
* Gets the commit hash from a Jenkins build object, if any
*/
@NonCPS
def commitHashForBuild( build ) {
def scmAction = build?.actions.find { action -> action instanceof jenkins.scm.api.SCMRevisionAction }
return scmAction?.revision?.hash
}
@spun1525
Copy link

spun1525 commented Apr 8, 2022

Is there a way i can get the getLastSuccessfulCommit in a Declarative Pipeline ?

@rgarg-quotient
Copy link

rgarg-quotient commented Mar 4, 2023

GIT_PREVIOUS_SUCCESSFUL_COMMIT is the environment variable exposed by jenkins build and provides the last successful build git commit.

@yjsun1
Copy link

yjsun1 commented Mar 20, 2023

GIT_PREVIOUS_SUCCESSFUL_COMMIT is the environment variable exposed by jenkins build and provides the last successful build git commit.

simple variable! it works.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment