roman
roman

Reputation: 860

Jenkins BUILD_USER_ID MissingPropertyException for Pipeline Trigerred by Git SCM

I need to get BUILD_USER_ID from Jenkins pipeline, and successfully implemented using this tutorial: here

It works when triggered manually by user, but error returned when triggered by GitSCM.

groovy.lang.MissingPropertyException: No such property: BUILD_USER_ID for class: groovy.lang.Binding

Please help.

Upvotes: 1

Views: 5345

Answers (1)

Tidhar Klein Orbach
Tidhar Klein Orbach

Reputation: 2976

BUILD_USER_ID is being set only if the build has a UserIdCause:

https://github.com/jenkinsci/build-user-vars-plugin/blob/master/src/main/java/org/jenkinsci/plugins/builduser/BuildUser.java#L84-L88

UserIdCause userIdCause = (UserIdCause) build.getCause(UserIdCause.class);
        if(new UserIdCauseDeterminant().setJenkinsUserBuildVars(userIdCause, variables)) {
            return;
        }

https://github.com/jenkinsci/build-user-vars-plugin/blob/master/src/main/java/org/jenkinsci/plugins/builduser/varsetter/impl/UserIdCauseDeterminant.java#L42

public boolean setJenkinsUserBuildVars(UserIdCause cause,
            Map<String, String> variables) {
        if(null != cause) {
            String username = cause.getUserName();
            UsernameUtils.setUsernameVars(username, variables);

            String userid = StringUtils.trimToEmpty(cause.getUserId());
            variables.put(BUILD_USER_ID, userid);

If the build was triggered by SCMTrigger, you will not have BUILD_USER_ID. instead you would have BUILD_USER:

https://github.com/jenkinsci/build-user-vars-plugin/blob/master/src/main/java/org/jenkinsci/plugins/builduser/BuildUser.java#L78

// set BUILD_USER_NAME to fixed value if the build was triggered by a change in the scm
        SCMTrigger.SCMTriggerCause scmTriggerCause = (SCMTrigger.SCMTriggerCause) build.getCause(SCMTrigger.SCMTriggerCause.class);
        if (new SCMTriggerCauseDeterminant().setJenkinsUserBuildVars(scmTriggerCause, variables)) {
            return;
        }

https://github.com/jenkinsci/build-user-vars-plugin/blob/master/src/main/java/org/jenkinsci/plugins/builduser/varsetter/impl/SCMTriggerCauseDeterminant.java#L15

public boolean setJenkinsUserBuildVars(SCMTriggerCause cause,
            Map<String, String> variables) {

        if (cause != null) {
            UsernameUtils.setUsernameVars("SCMTrigger", variables);

            return true;
        } else {
            return false;
        }
    }

https://github.com/jenkinsci/build-user-vars-plugin/blob/master/src/main/java/org/jenkinsci/plugins/builduser/utils/UsernameUtils.java#L28

public static void setUsernameVars(String username, Map<String, String> variables) {
        variables.put(BUILD_USER_VAR_NAME, username);
        variables.put(BUILD_USER_FIRST_NAME_VAR_NAME, getFirstName(username));
        variables.put(BUILD_USER_LAST_NAME_VAR_NAME, getLastName(username));
    }

To overcome this, you can check if BUILD_USER_ID exists prior to its usage.

Upvotes: 3

Related Questions