diff --git a/pom.xml b/pom.xml
index 78e1ec7..d042c1c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -99,6 +99,11 @@
org.jenkins-ci.plugins.workflow
workflow-multibranch
+
+ org.jenkins-ci.plugins
+ cloudbees-bitbucket-branch-source
+ true
+
org.jenkins-ci.plugins
diff --git a/src/main/java/com/cloudbees/jenkins/plugins/BitbucketHookReceiver.java b/src/main/java/com/cloudbees/jenkins/plugins/BitbucketHookReceiver.java
index 19db1a0..5d862da 100644
--- a/src/main/java/com/cloudbees/jenkins/plugins/BitbucketHookReceiver.java
+++ b/src/main/java/com/cloudbees/jenkins/plugins/BitbucketHookReceiver.java
@@ -17,7 +17,7 @@
* @author Nicolas De Loof
*/
@Extension
-public class BitbucketHookReceiver implements UnprotectedRootAction {
+public class BitbucketHookReceiver extends BitbucketCrumbExclusion implements UnprotectedRootAction {
private final BitbucketPayloadProcessor payloadProcessor = new BitbucketPayloadProcessor();
public static final String BITBUCKET_HOOK_URL = "bitbucket-hook";
diff --git a/src/main/java/com/cloudbees/jenkins/plugins/BitbucketJobProbe.java b/src/main/java/com/cloudbees/jenkins/plugins/BitbucketJobProbe.java
index cc0b9ea..100466a 100644
--- a/src/main/java/com/cloudbees/jenkins/plugins/BitbucketJobProbe.java
+++ b/src/main/java/com/cloudbees/jenkins/plugins/BitbucketJobProbe.java
@@ -33,9 +33,19 @@
import org.eclipse.jgit.transport.URIish;
import com.google.common.base.Objects;
import org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject;
+import com.cloudbees.jenkins.plugins.bitbucket.BitbucketSCMSource;
public class BitbucketJobProbe {
+ private boolean isBranchPluginAvailable = false;
+
+ public BitbucketJobProbe() {
+ if (Jenkins.get().getPlugin("cloudbees-bitbucket-branch-source") != null) {
+ LOGGER.log(Level.FINEST, "Bitbucket branch source available");
+ isBranchPluginAvailable = true;
+ }
+ }
+
public void triggerMatchingJobs(String user, String url, String scm, String payload) {
triggerMatchingJobs(user, url, scm, payload, null);
}
@@ -56,7 +66,7 @@ public void triggerMatchingJobs(String user, String url, String scm, String payl
bTrigger = (BitBucketTrigger) trigger;
LOGGER.log(Level.FINE, "Job [{0}] has BitBucketTrigger", job.getName());
break;
- } else if ( trigger instanceof BitBucketMultibranchTrigger){
+ } else if (trigger instanceof BitBucketMultibranchTrigger) {
LOGGER.fine("Trigger is BitBucketMultibranchTrigger");
}
}
@@ -98,7 +108,7 @@ public void triggerMatchingJobs(String user, String url, String scm, String payl
LOGGER.finest("scmSourceOwner [" + scmSourceOwner.getName() + "] is of type WorkflowMultiBranchProject");
WorkflowMultiBranchProject workflowMultiBranchProject = (WorkflowMultiBranchProject) scmSourceOwner;
AtomicReference bitBucketMultibranchTrigger = new AtomicReference<>(null);
- if ( workflowMultiBranchProject.getTriggers().isEmpty()) {
+ if (workflowMultiBranchProject.getTriggers().isEmpty()) {
LOGGER.finest("No triggers found");
} else {
workflowMultiBranchProject.getTriggers().forEach(((triggerDescriptor, trigger) -> {
@@ -108,10 +118,10 @@ public void triggerMatchingJobs(String user, String url, String scm, String payl
}
}));
}
- if ( bitBucketMultibranchTrigger.get() == null){
+ if (bitBucketMultibranchTrigger.get() == null) {
scmSourceOwner.onSCMSourceUpdated(scmSource);
} else {
- if (workflowMultiBranchProject.isBuildable()){
+ if (workflowMultiBranchProject.isBuildable()) {
bitBucketMultibranchTrigger.get().setPayload(payload);
BitBucketPushCause bitBucketPushCause = new BitBucketPushCause(user);
workflowMultiBranchProject.scheduleBuild2(0, new CauseAction(bitBucketPushCause));
@@ -125,19 +135,19 @@ public void triggerMatchingJobs(String user, String url, String scm, String payl
} else if (scmSourceOwner instanceof WorkflowMultiBranchProject) {
LOGGER.finest("scmSourceOwner [" + scmSourceOwner.getName() + "] is of type WorkflowMultiBranchProject");
WorkflowMultiBranchProject workflowMultiBranchProject = (WorkflowMultiBranchProject) scmSourceOwner;
- if ( workflowMultiBranchProject.getTriggers().isEmpty()){
+ if (workflowMultiBranchProject.getTriggers().isEmpty()) {
LOGGER.finest("No triggers found");
} else {
workflowMultiBranchProject.getTriggers().forEach(((triggerDescriptor, trigger) -> {
- if ( trigger instanceof BitBucketMultibranchTrigger){
+ if (trigger instanceof BitBucketMultibranchTrigger) {
LOGGER.finest("Found BitBucketMultibranchTrigger type");
BitBucketMultibranchTrigger bitBucketMultibranchTrigger = (BitBucketMultibranchTrigger) trigger;
- if ( bitBucketMultibranchTrigger.getOverrideUrl() == null || bitBucketMultibranchTrigger.getOverrideUrl().isEmpty()){
+ if (bitBucketMultibranchTrigger.getOverrideUrl() == null || bitBucketMultibranchTrigger.getOverrideUrl().isEmpty()) {
LOGGER.finest("Ignoring empty overrideUrl");
} else {
LOGGER.fine("Found override URL [" + bitBucketMultibranchTrigger.getOverrideUrl() + "]");
LOGGER.log(Level.FINE, "Trying to match {0} ", remote + "<-->" + bitBucketMultibranchTrigger.getOverrideUrl());
- if ( bitBucketMultibranchTrigger.getOverrideUrl().equalsIgnoreCase(remote.toString())) {
+ if (bitBucketMultibranchTrigger.getOverrideUrl().equalsIgnoreCase(remote.toString())) {
LOGGER.info(String.format("Triggering BitBucket scmSourceOwner [%s] by overrideUrl [%s]",scmSourceOwner.getName(), bitBucketMultibranchTrigger.getOverrideUrl()));
scmSourceOwner.onSCMSourceUpdated(scmSource);
}
@@ -216,10 +226,21 @@ private boolean match(SCM scm, URIish url, String overrideUrl) {
}
private boolean match(SCMSource scm, URIish url) {
- if (scm instanceof GitSCMSource) {
- LOGGER.log(Level.FINEST, "SCMSource is GitSCMSource");
- String gitRemote = ((GitSCMSource) scm).getRemote();
+ if (scm instanceof GitSCMSource || (isBranchPluginAvailable && scm instanceof BitbucketSCMSource)) {
+ String gitRemote;
+ if (scm instanceof GitSCMSource) {
+ LOGGER.log(Level.FINEST, "SCMSource is GitSCMSource");
+ gitRemote = ((GitSCMSource) scm).getRemote();
+ } else if (isBranchPluginAvailable) {
+ LOGGER.log(Level.FINEST, "SCMSource is BitbucketSCMSource");
+ gitRemote = ((BitbucketSCMSource) scm).getServerUrl() + "/" +
+ ((BitbucketSCMSource) scm).getRepoOwner() + "/" +
+ ((BitbucketSCMSource) scm).getRepository();
+ } else {
+ return false;
+ }
URIish urIish;
+ LOGGER.log(Level.FINEST, "SCMSource remote is " + gitRemote);
try {
urIish = new URIish(gitRemote);
} catch (URISyntaxException e) {