diff options
author | Duarte Meneses <duarte.meneses@sonarsource.com> | 2020-03-03 16:54:40 -0600 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2020-03-13 20:04:14 +0000 |
commit | 1290e77dd6f5759354122cecd966074127351e15 (patch) | |
tree | f232155e4301c9896fb984e182f4a7c810c762fe /sonar-scanner-engine/src/main/java/org/sonar/scanner/ci | |
parent | 84b6eb00580f43c3c2df0567a5f626384d777090 (diff) | |
download | sonarqube-1290e77dd6f5759354122cecd966074127351e15.tar.gz sonarqube-1290e77dd6f5759354122cecd966074127351e15.zip |
SONAR-11853 SONAR-13161 Auto-configuration pull requests and branches on Jenkins
Diffstat (limited to 'sonar-scanner-engine/src/main/java/org/sonar/scanner/ci')
-rw-r--r-- | sonar-scanner-engine/src/main/java/org/sonar/scanner/ci/vendors/Jenkins.java | 60 |
1 files changed, 55 insertions, 5 deletions
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/ci/vendors/Jenkins.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/ci/vendors/Jenkins.java index 64d98ec4748..d79cbd7c17c 100644 --- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/ci/vendors/Jenkins.java +++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/ci/vendors/Jenkins.java @@ -19,8 +19,15 @@ */ package org.sonar.scanner.ci.vendors; +import java.nio.file.Path; import org.apache.commons.lang.StringUtils; +import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.lib.RepositoryBuilder; +import org.sonar.api.batch.fs.internal.DefaultInputProject; import org.sonar.api.utils.System2; +import org.sonar.api.utils.log.Logger; +import org.sonar.api.utils.log.Loggers; import org.sonar.scanner.ci.CiConfiguration; import org.sonar.scanner.ci.CiConfigurationImpl; import org.sonar.scanner.ci.CiVendor; @@ -28,10 +35,13 @@ import org.sonar.scanner.ci.CiVendor; import static org.apache.commons.lang.StringUtils.isNotBlank; public class Jenkins implements CiVendor { + private final static Logger log = Loggers.get(Jenkins.class); private final System2 system; + private final DefaultInputProject inputProject; - public Jenkins(System2 system) { + public Jenkins(System2 system, DefaultInputProject inputProject) { this.system = system; + this.inputProject = inputProject; } @Override @@ -51,12 +61,52 @@ public class Jenkins implements CiVendor { // https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin#GitHubpullrequestbuilderplugin-EnvironmentVariables // https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project String revision = system.envVariable("ghprbActualCommit"); - if (StringUtils.isBlank(revision)) { - revision = system.envVariable("GIT_COMMIT"); - if (StringUtils.isBlank(revision)) { - revision = system.envVariable("SVN_COMMIT"); + if (StringUtils.isNotBlank(revision)) { + return new CiConfigurationImpl(revision); + } + + revision = system.envVariable("GIT_COMMIT"); + + if (StringUtils.isNotBlank(revision)) { + if (StringUtils.isNotBlank(system.envVariable("CHANGE_ID"))) { + String jenkinsGitPrSha1 = getJenkinsGitPrSha1(); + if (StringUtils.isNotBlank(jenkinsGitPrSha1)) { + return new CiConfigurationImpl(jenkinsGitPrSha1); + } } + return new CiConfigurationImpl(revision); } + + revision = system.envVariable("SVN_COMMIT"); return new CiConfigurationImpl(revision); } + + private String getJenkinsGitPrSha1() { + String gitBranch = system.envVariable("GIT_BRANCH"); + if (StringUtils.isBlank(gitBranch)) { + return null; + } + + Path baseDir = inputProject.getBaseDir(); + + RepositoryBuilder builder = new RepositoryBuilder() + .findGitDir(baseDir.toFile()) + .setMustExist(true); + + if (builder.getGitDir() == null) { + return null; + } + + String refName = "refs/remotes/origin/" + gitBranch; + try (Repository repo = builder.build()) { + Ref ref = repo.exactRef(refName); + if (ref != null) { + return ref.getObjectId().getName(); + } + } catch (Exception e) { + log.debug("Couldn't find git sha1 in '{}': {}", refName, e.getMessage()); + } + return null; + } + } |