Skip to content

Commit

Permalink
Fix env variable interpolation
Browse files Browse the repository at this point in the history
  • Loading branch information
henryju committed Apr 6, 2018
1 parent 5a30675 commit 28cbd92
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 17 deletions.
32 changes: 21 additions & 11 deletions src/main/java/hudson/plugins/sonar/SonarBuildWrapper.java
Expand Up @@ -46,10 +46,11 @@
import jenkins.model.Jenkins;
import jenkins.tasks.SimpleBuildWrapper;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.jenkinsci.Symbol;
import org.kohsuke.stapler.DataBoundConstructor;

import static org.apache.commons.lang3.StringEscapeUtils.escapeJson;

public class SonarBuildWrapper extends SimpleBuildWrapper {
private String installationName = null;

Expand All @@ -69,21 +70,21 @@ public void setUp(Context context, Run<?, ?> build, FilePath workspace, Launcher
Logger.LOG.info(msg);
listener.getLogger().println(msg);

context.getEnv().putAll(createVars(installation));
context.getEnv().putAll(createVars(installation, initialEnvironment));

context.setDisposer(new AddBuildInfo(installation));

build.addAction(new SonarMarkerAction());
}

@VisibleForTesting
static Map<String, String> createVars(SonarInstallation inst) {
static Map<String, String> createVars(SonarInstallation inst, EnvVars initialEnvironment) {
Map<String, String> map = new HashMap<>();

map.put("SONAR_CONFIG_NAME", inst.getName());
String hostUrl = getOrDefault(inst.getServerUrl(), "http://localhost:9000");
String hostUrl = getOrDefault(initialEnvironment.expand(inst.getServerUrl()), "http://localhost:9000");
map.put("SONAR_HOST_URL", hostUrl);
String token = getOrDefault(inst.getServerAuthenticationToken(), "");
String token = getOrDefault(initialEnvironment.expand(inst.getServerAuthenticationToken()), "");
map.put("SONAR_AUTH_TOKEN", token);

if (StringUtils.isEmpty(inst.getMojoVersion())) {
Expand All @@ -92,20 +93,29 @@ static Map<String, String> createVars(SonarInstallation inst) {
map.put("SONAR_MAVEN_GOAL", SonarUtils.getMavenGoal(inst.getMojoVersion()));
}

map.put("SONAR_EXTRA_PROPS", getOrDefault(getAdditionalProps(inst), ""));
map.put("SONAR_EXTRA_PROPS", getOrDefault(initialEnvironment.expand(getAdditionalProps(inst)), ""));

// resolve variables against each other
EnvVars.resolve(map);

StringBuilder sb = new StringBuilder();
sb.append("{ \"sonar.host.url\" : \"").append(StringEscapeUtils.escapeJson(hostUrl)).append("\"");
sb.append("{ \"sonar.host.url\" : \"").append(escapeJson(hostUrl)).append("\"");
if (!token.isEmpty()) {
sb.append(", \"sonar.login\" : \"").append(StringEscapeUtils.escapeJson(token)).append("\"");
sb.append(", \"sonar.login\" : \"").append(escapeJson(token)).append("\"");
}
String additionalAnalysisProperties = inst.getAdditionalAnalysisProperties();
if (additionalAnalysisProperties != null) {
for (String pair : StringUtils.split(additionalAnalysisProperties)) {
String[] keyValue = StringUtils.split(pair, "=");
if (keyValue.length == 2) {
sb.append(", \"").append(escapeJson(keyValue[0])).append("\" : \"").append(escapeJson(initialEnvironment.expand(keyValue[1]))).append("\"");
}
}
}
sb.append("}");

map.put("SONARQUBE_SCANNER_PARAMS", sb.toString());

// resolve variables against each other
EnvVars.resolve(map);

return map;
}

Expand Down
4 changes: 4 additions & 0 deletions src/main/java/hudson/plugins/sonar/SonarInstallation.java
Expand Up @@ -23,6 +23,7 @@
import hudson.model.TaskListener;
import hudson.plugins.sonar.model.TriggersConfig;
import java.io.Serializable;
import javax.annotation.CheckForNull;
import jenkins.model.Jenkins;
import org.apache.commons.lang.StringUtils;
import org.kohsuke.stapler.DataBoundConstructor;
Expand Down Expand Up @@ -151,14 +152,17 @@ public String getServerAuthenticationToken() {
* @return version of sonar-maven-plugin to use
* @since 1.5
*/
@CheckForNull
public String getMojoVersion() {
return mojoVersion;
}

@CheckForNull
public String getAdditionalProperties() {
return additionalProperties;
}

@CheckForNull
public String getAdditionalAnalysisProperties() {
return additionalAnalysisProperties;
}
Expand Down
22 changes: 16 additions & 6 deletions src/test/java/hudson/plugins/sonar/SonarBuildWrapperTest.java
Expand Up @@ -113,25 +113,30 @@ public void maskAuthToken() throws IOException, InterruptedException {

@Test
public void testEnvironment() {
installation = createTestInstallation();
installation = createTestInstallationForEnv();

Map<String, String> map = SonarBuildWrapper.createVars(installation);
EnvVars initialEnvironment = new EnvVars();
initialEnvironment.put("MY_SERVER", "myserver");
initialEnvironment.put("MY_PORT", "10000");
initialEnvironment.put("MY_VALUE", "myValue");
Map<String, String> map = SonarBuildWrapper.createVars(installation, initialEnvironment);

assertThat(map).containsEntry("SONAR_HOST_URL", "http://localhost:9001");
assertThat(map).containsEntry("SONAR_HOST_URL", "http://myserver:10000");
assertThat(map).containsEntry("SONAR_CONFIG_NAME", "local");
// variable in the value should be resolved
assertThat(map).containsEntry("SONAR_AUTH_TOKEN", MYTOKEN);
assertThat(map).containsEntry("SONAR_MAVEN_GOAL", "sonar:sonar");
assertThat(map).containsEntry("SONAR_EXTRA_PROPS", "-Dkey=value -X");
assertThat(map).containsEntry("SONAR_EXTRA_PROPS", "-Dkey=myValue -X");

assertThat(map).containsEntry("SONARQUBE_SCANNER_PARAMS", "{ \"sonar.host.url\" : \"http:\\/\\/localhost:9001\", \"sonar.login\" : \"" + MYTOKEN + "\"}");
assertThat(map).containsEntry("SONARQUBE_SCANNER_PARAMS",
"{ \"sonar.host.url\" : \"http:\\/\\/myserver:10000\", \"sonar.login\" : \"" + MYTOKEN + "\", \"key\" : \"myValue\"}");
}

@Test
public void testEnvironmentMojoVersion() {
installation = new SonarInstallation(null, null, null, "2.0", null, null, null);

Map<String, String> map = SonarBuildWrapper.createVars(installation);
Map<String, String> map = SonarBuildWrapper.createVars(installation, new EnvVars());

assertThat(map).containsEntry("SONAR_MAVEN_GOAL", "org.codehaus.mojo:sonar-maven-plugin:2.0:sonar");
}
Expand Down Expand Up @@ -241,4 +246,9 @@ private static SonarInstallation createTestInstallation() {
"-X", new TriggersConfig(), "key=value");
}

private static SonarInstallation createTestInstallationForEnv() {
return new SonarInstallation("local", "http://$MY_SERVER:$MY_PORT", MYTOKEN, null,
"-X", new TriggersConfig(), "key=$MY_VALUE");
}

}

0 comments on commit 28cbd92

Please sign in to comment.