-
-
Save ftclausen/8c46195ee56e48e4d01cbfab19c41fc0 to your computer and use it in GitHub Desktop.
| // -*- 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 | |
| } |
Has anyone else having trouble with getRevisionList() ?
I keep receiving the following
[ERROR: getRevisionList]: org.jenkinsci.plugins.workflow.job.WorkflowRun
I believe its due to the git rev-list shell command as my multi-branch pipeline jobs are being merged before any building occurs. Seems to be comparing the same commit and erroring out. Testing the git rev-list on my local machine seems to output a bunch of git sha's out.
roman-acumen commented on Nov 22, 2019
Thank you!
@NonCPS
def commitHashForBuild( build ) {
def scmAction = build?.actions.find { action -> action instanceof jenkins.scm.api.SCMRevisionAction }
return scmAction?.revision?.hash
}
Does this only works with multibranch pipeline jobs and doesnot work with regular jobs? This doesnot seem to work for me for regular jobs..
in a multi branch pipeline there is a env var exposed GIT_PREVIOUS_COMMIT. This seems to be the commit of the last build however regardless of pass fail.
Is there a way i can get the getLastSuccessfulCommit in a Declarative Pipeline ?
GIT_PREVIOUS_SUCCESSFUL_COMMIT is the environment variable exposed by jenkins build and provides the last successful build git commit.
GIT_PREVIOUS_SUCCESSFUL_COMMITis the environment variable exposed by jenkins build and provides the last successful build git commit.
simple variable! it works.
Solution using jenkins changelogsets