How to check if a pipeline is triggered from a pull request

The env variable CHANGE_ID only exists when the build is triggered from a Pull Request check.

For a multibranch project corresponding to some kind of change request, this will be set to the change ID, such as a pull request number, if supported; else unset.


To specifically detect GitHub pull requests, this can be used:

  script {
    if (env.BRANCH_NAME == 'master') {
      sh 'make'
    } else if (env.BRANCH_NAME.startsWith('PR')) {
      // do actions for pull request
    } else {
      // some other branch
    } 
  }

Of course, if you expect to have branches starting with PR on your main repository this wouldn't be reliable. The nice thing about it is that script can be used also in post not just stages, which is useful since when is not allowed in post. If you don't care about that it's worth looking into the when directive. There is some documentation from Cloudbees and Jenkins with some examples.


At least on Jenkins 2.16 env.BRANCH_NAME gives the source branch not the target branch. You could do something like:

if (env.BRANCH_NAME == "master") {
  sh "./publish.sh"
}

Other env vars that could be useful are the CHANGE_* variables. E.g.,

CHANGE_AUTHOR='me'
CHANGE_ID='6'
CHANGE_TARGET='master'
CHANGE_TITLE='Update README.md'
CHANGE_URL='https://github.com/test-org/test-repo/pull/6'

For documentation on these and more: https://ci.eclipse.org/webtools/env-vars.html/