aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-scanner-engine/src/main/java/org/sonar/scanner/ci
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2020-03-03 16:54:40 -0600
committersonartech <sonartech@sonarsource.com>2020-03-13 20:04:14 +0000
commit1290e77dd6f5759354122cecd966074127351e15 (patch)
treef232155e4301c9896fb984e182f4a7c810c762fe /sonar-scanner-engine/src/main/java/org/sonar/scanner/ci
parent84b6eb00580f43c3c2df0567a5f626384d777090 (diff)
downloadsonarqube-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.java60
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;
+ }
+
}