How to know which user answered a Jenkins-Pipeline input step?

I have a Jenkinsfile script that tests for the possibility to perform an SVN merge and then asks the user for the permission to commit the merge.

I would like to know the username that answers the “input” step in order to write it into the commit message.

  • Git + Jenkins Builds from hooks - remote branches across multiple servers
  • How to get svn version number from checkout for use in dsl
  • cannot run jenkins, even after clearing it's directory
  • How to process a github webhook payload in Jenkins?
  • Jenkins Pipeline: “input” step blocks executor
  • Jenkis downstream job fails to find upstream artifacts
  • Is this possibile?

    This is what hypothetically I would like to do:

    outcome = input message: 'Merge trunk into branch?', ok: 'Merge'
    echo "User that allowed merge: ${outcome.user}"
    

  • Jenkins skip SCM on parameter
  • Jenkins jobs and GIT/maven structure
  • Moving library development in its own project
  • Jenkins Git Plugin does not receive posted Parameters
  • Jenkins and Gitlab: Webhook isn't running
  • Jenkins BUILD FAILED/CANCELLED on openshift
  • 4 Solutions collect form web for “How to know which user answered a Jenkins-Pipeline input step?”

    The input step got an optional submitterParameter, which allows to specify the key of the returned Map that should contain the user who’s submitting the input dialog:

    If specified, this is the name of the return value that will contain the ID of the user that approves this input.
    The return value will be handled in a fashion similar to the parameters value.
    Type: String

    This looks then as follows:

    def feedback = input(submitterParameter: 'submitter', ...)
    echo "It was ${feedback.submitter} who submitted the dialog."
    

    P.S: If anybody is interested in a full-fledged code snippet returning the user both for positive and negative feedback to the dialog (and timeout as well), I kindly point to our pipeline library.

    It is not currently possible, for now only entry parameters are returned in the input step answer, as mentionned in source code :

    // TODO: perhaps we should return a different object to allow the workflow to look up
    // who approved it, etc?
    switch (mapResult.size()) {
    case 0:
        return null;    // no value if there's no parameter
    case 1:
        return mapResult.values().iterator().next();
    default:
        return mapResult;
    }
    

    If you’d like to restrict which user(s) can approve the input step, you can however use the submitter parameter, e.g. :

    input message: 'Approve ?', submitter: 'authorized-submitter'
    

    EDIT

    Since January 2017 it is now possible to request additional parameters to be sent. Please see StephenKing answer above.

    You can do this for exceptions if you turn off the groovy-sandbox:

    try {
     'Deploy to production?'
    
     node {
      sh 'echo deploying'
      }
    } catch(e) {
      def user = e.getCauses()[0].getUser()
       echo "Production deployment aborted by:\n ${user}"
    }
    

    If you are not asking for any parameters on the input, then adding the submitterParameter kind of worked. It didn’t add it as a parameter on the return object, instead, it turned the returned object into a string with the username in it.

    def feedback = input(submitterParameter: 'submitter')
    echo "It was ${feedback} who submitted the dialog."
    
    Git Baby is a git and github fan, let's start git clone.