Reputation: 860
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
Reputation: 2976
BUILD_USER_ID is being set only if the build has a UserIdCause:
UserIdCause userIdCause = (UserIdCause) build.getCause(UserIdCause.class);
if(new UserIdCauseDeterminant().setJenkinsUserBuildVars(userIdCause, variables)) {
return;
}
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:
// 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;
}
public boolean setJenkinsUserBuildVars(SCMTriggerCause cause,
Map<String, String> variables) {
if (cause != null) {
UsernameUtils.setUsernameVars("SCMTrigger", variables);
return true;
} else {
return false;
}
}
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