Skip to content

Commit

Permalink
[JENKINS-40665] Add support for Maven settings defined through Jenkin…
Browse files Browse the repository at this point in the history
…s global configuration
  • Loading branch information
Cyrille Le Clerc committed Apr 23, 2017
1 parent 28d1d2a commit 90db6c5
Show file tree
Hide file tree
Showing 2 changed files with 251 additions and 43 deletions.
Expand Up @@ -24,8 +24,8 @@

package org.jenkinsci.plugins.pipeline.maven;


import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
Expand All @@ -36,6 +36,7 @@
import java.security.CodeSource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -46,12 +47,38 @@

import javax.annotation.Nonnull;

import com.cloudbees.plugins.credentials.common.StandardUsernameCredentials;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Objects;
import com.google.common.collect.Iterables;
import edu.umd.cs.findbugs.annotations.Nullable;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import hudson.AbortException;
import hudson.EnvVars;
import hudson.FilePath;
import hudson.Launcher;
import hudson.Launcher.ProcStarter;
import hudson.Proc;
import hudson.Util;
import hudson.console.ConsoleLogFilter;
import hudson.model.AbstractBuild;
import hudson.model.BuildListener;
import hudson.model.Computer;
import hudson.model.JDK;
import hudson.model.Node;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.slaves.WorkspaceList;
import hudson.tasks.Maven;
import hudson.tasks.Maven.MavenInstallation;
import hudson.tasks._maven.MavenConsoleAnnotator;
import hudson.util.ArgumentListBuilder;
import jenkins.model.Jenkins;
import jenkins.mvn.DefaultGlobalSettingsProvider;
import jenkins.mvn.DefaultSettingsProvider;
import jenkins.mvn.FilePathGlobalSettingsProvider;
import jenkins.mvn.FilePathSettingsProvider;
import jenkins.mvn.GlobalMavenConfig;
import jenkins.mvn.GlobalSettingsProvider;
import jenkins.mvn.SettingsProvider;
Expand All @@ -69,25 +96,6 @@
import org.jenkinsci.plugins.workflow.steps.BodyInvoker;
import org.jenkinsci.plugins.workflow.steps.EnvironmentExpander;
import org.jenkinsci.plugins.workflow.steps.StepContext;

import com.cloudbees.plugins.credentials.common.StandardUsernameCredentials;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

import hudson.AbortException;
import hudson.EnvVars;
import hudson.FilePath;
import hudson.Launcher;
import hudson.Launcher.ProcStarter;
import hudson.Proc;
import hudson.Util;
import hudson.console.ConsoleLogFilter;
import hudson.model.*;
import hudson.slaves.WorkspaceList;
import hudson.tasks.Maven;
import hudson.tasks.Maven.MavenInstallation;
import hudson.tasks._maven.MavenConsoleAnnotator;
import hudson.util.ArgumentListBuilder;
import jenkins.model.*;
import org.jenkinsci.plugins.workflow.steps.StepExecution;
import org.springframework.util.ClassUtils;

Expand Down Expand Up @@ -573,6 +581,36 @@ private String setupSettingFile() throws IOException, InterruptedException {
return settingsDest.getRemote();
}

// Settings provided by the global maven configuration
SettingsProvider settingsProvider = GlobalMavenConfig.get().getSettingsProvider();
if (settingsProvider instanceof MvnSettingsProvider) {
MvnSettingsProvider mvnSettingsProvider = (MvnSettingsProvider) settingsProvider;
console.format("[withMaven] use Maven settings provided by the Jenkins global configuration '%s' %n", mvnSettingsProvider.getSettingsConfigId());
settingsFromConfig(mvnSettingsProvider.getSettingsConfigId(), settingsDest);
envOverride.put("MVN_SETTINGS", settingsDest.getRemote());
return settingsDest.getRemote();
} else if (settingsProvider instanceof FilePathSettingsProvider) {
FilePathSettingsProvider filePathSettingsProvider = (FilePathSettingsProvider) settingsProvider;
String settingsPath = filePathSettingsProvider.getPath();
FilePath settings;
if ((settings = ws.child(settingsPath)).exists()) {
// Settings file residing on the agent
console.format("[withMaven] use Maven settings provided by the Jenkins global configuration on the build agent '%s' %n", settingsPath);
settings.copyTo(settingsDest);
} else {
throw new AbortException("Could not find file provided by the Jenkins global configuration '" + settings + "' on the build agent");
}
envOverride.put("MVN_SETTINGS", settingsDest.getRemote());
return settingsDest.getRemote();
} else if (settingsProvider instanceof DefaultSettingsProvider) {
// do nothing
} else if (settingsProvider == null) {
// should not happen according to the source code of jenkins.mvn.MavenConfig.getSettingsProvider() in jenkins-core 2.7
// do nothing
} else {
console.println("[withMaven] Ignore unsupported Maven SettingsProvider " + settingsProvider);
}

return null;
}

Expand Down Expand Up @@ -674,7 +712,9 @@ private void settingsFromConfig(String mavenSettingsConfigId, FilePath mavenSett

try {

final List<ServerCredentialMapping> serverCredentialMappings = mavenSettingsConfig.getServerCredentialMappings();
// JENKINS-43787 handle null
final List<ServerCredentialMapping> serverCredentialMappings = Objects.firstNonNull(mavenSettingsConfig.getServerCredentialMappings(), Collections.<ServerCredentialMapping>emptyList());

final Map<String, StandardUsernameCredentials> resolvedCredentials = CredentialsHelper.resolveCredentials(build, serverCredentialMappings);

String mavenSettingsFileContent;
Expand Down Expand Up @@ -723,7 +763,9 @@ private void globalSettingsFromConfig(String mavenGlobalSettingsConfigId, FilePa
}

try {
final List<ServerCredentialMapping> serverCredentialMappings = mavenGlobalSettingsConfig.getServerCredentialMappings();
// JENKINS-43787 handle null
final List<ServerCredentialMapping> serverCredentialMappings = Objects.firstNonNull(mavenGlobalSettingsConfig.getServerCredentialMappings(), Collections.<ServerCredentialMapping>emptyList());

final Map<String, StandardUsernameCredentials> resolvedCredentials = CredentialsHelper.resolveCredentials(build, serverCredentialMappings);

String mavenGlobalSettingsFileContent;
Expand Down

0 comments on commit 90db6c5

Please sign in to comment.