diff --git a/pom.xml b/pom.xml
index 16cbfcd4..01175073 100644
--- a/pom.xml
+++ b/pom.xml
@@ -212,13 +212,13 @@
repo.jenkins-ci.org
- https://repo.jenkins.io/public/
+ https://repo.jenkins-ci.org/public/
repo.jenkins-ci.org
- https://repo.jenkins.io/public/
+ https://repo.jenkins-ci.org/public/
diff --git a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/BitBucketPPRJobProbe.java b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/BitBucketPPRJobProbe.java
index 7c65edde..f000c7f7 100644
--- a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/BitBucketPPRJobProbe.java
+++ b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/BitBucketPPRJobProbe.java
@@ -21,11 +21,6 @@
package io.jenkins.plugins.bitbucketpushandpullrequest;
-import static io.jenkins.plugins.bitbucketpushandpullrequest.common.BitBucketPPRConst.PULL_REQUEST_MERGED;
-import static io.jenkins.plugins.bitbucketpushandpullrequest.common.BitBucketPPRConst.PULL_REQUEST_SERVER_MERGED;
-import static io.jenkins.plugins.bitbucketpushandpullrequest.common.BitBucketPPRConst.REPOSITORY_CLOUD_PUSH;
-import static io.jenkins.plugins.bitbucketpushandpullrequest.common.BitBucketPPRConst.REPOSITORY_SERVER_PUSH;
-
import hudson.model.Job;
import hudson.plugins.git.GitSCM;
import hudson.plugins.git.GitStatus;
@@ -53,6 +48,11 @@
import jenkins.model.ParameterizedJobMixIn;
import jenkins.triggers.SCMTriggerItem;
import org.eclipse.jgit.transport.URIish;
+import org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject;
+import jenkins.branch.BranchSource;
+import jenkins.scm.api.SCMSource;
+
+import static io.jenkins.plugins.bitbucketpushandpullrequest.common.BitBucketPPRConst.*;
/**
*
@@ -152,6 +152,8 @@ private void triggerScm(@Nonnull Job, ?> job, List remotes,
jobTrigger.scmTriggerItem.ifPresent(it -> it.getSCMs().forEach(scm -> {
+ triggerMultibranchScan(job, bitbucketAction);
+
// @todo add comments to explain what is this check for
if (job.getParent() instanceof MultiBranchProject
&& mPJobShouldNotBeTriggered(job, bitbucketEvent, bitbucketAction)) {
@@ -244,4 +246,59 @@ private boolean matchGitScm(SCM scm, URIish remote) {
.anyMatch((repo) -> repo.getURIs().stream().anyMatch((repoUrl) -> GitStatus.looselyMatches(repoUrl, remote)));
}
+ private void triggerMultibranchScan(@Nonnull Job, ?> job,
+ BitBucketPPRAction bitbucketAction) {
+
+ String getLatestCommit = bitbucketAction.getLatestCommit();
+ String getLatestFromCommit = bitbucketAction.getLatestFromCommit();
+ String pipelineName = job.getParent().getFullName();
+ String getPayldChgType = bitbucketAction.getPayloadChangeType();
+
+ if ((getLatestCommit != null) && (getLatestFromCommit != null) && (pipelineName != null) && (getPayldChgType != null)) {
+ if ((getLatestFromCommit.equals(EMPTY_HASH) && PAYLOAD_CHANGE_TYPE_ADD.equals(getPayldChgType)) ||
+ (getLatestCommit.equals(EMPTY_HASH) && PAYLOAD_CHANGE_TYPE_DELETE.equals(getPayldChgType))) {
+
+ Jenkins jenkins = Jenkins.get();
+
+ WorkflowMultiBranchProject mbp = jenkins.getInstance().getItemByFullName(pipelineName, WorkflowMultiBranchProject.class);
+
+ if (mbp != null) {
+ for (BranchSource bs : mbp.getSourcesList()) {
+ SCMSource src = bs.getSource();
+ String getOPT1CloneUrl = bitbucketAction.getOPT1CloneUrl();
+ String getOPT2CloneUrl = bitbucketAction.getOPT2CloneUrl();
+
+ logger.log(Level.FINEST,
+ "Source Type: {0}",
+ new String[] { src.getDescriptor().getDisplayName() });
+
+ if (src instanceof jenkins.plugins.git.GitSCMSource) {
+ jenkins.plugins.git.GitSCMSource git = (jenkins.plugins.git.GitSCMSource) src;
+ String gitRemote = git.getRemote();
+
+ logger.log(Level.FINEST,
+ "Branch Source URL: {0}",
+ new String[] { gitRemote });
+
+ if (gitRemote.equals(getOPT1CloneUrl) || gitRemote.equals(getOPT2CloneUrl)) {
+ logger.log(Level.FINEST,
+ "Branch Source URL: {0}, getOPT1CloneUrl: {1}, getOPT2CloneUrl: {2}",
+ new String[] { gitRemote, getOPT1CloneUrl, getOPT2CloneUrl });
+
+ mbp.scheduleBuild2(0);
+
+ logger.log(Level.INFO,
+ "Triggered branch indexing for: {0}",
+ new String[] { pipelineName });
+ }
+ }
+ }
+ } else {
+ logger.log(Level.WARNING,
+ "Multibranch job not found: {0}",
+ new String[] { pipelineName });
+ }
+ }
+ }
+ }
}
diff --git a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRAction.java b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRAction.java
index eb65e6dc..d98a1c2d 100644
--- a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRAction.java
+++ b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRAction.java
@@ -141,4 +141,12 @@ default String getLatestCommitFromRef() {
default String getLatestCommitToRef() {
return null;
}
+
+ default String getLatestFromCommit() { return null; }
+
+ default String getPayloadChangeType() { return null; }
+
+ default String getOPT1CloneUrl() { return null; }
+
+ default String getOPT2CloneUrl() { return null; }
}
diff --git a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRServerRepositoryAction.java b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRServerRepositoryAction.java
index fcc1e323..0c17cbac 100644
--- a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRServerRepositoryAction.java
+++ b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/action/BitBucketPPRServerRepositoryAction.java
@@ -186,4 +186,34 @@ public List getCommitLinks() throws MalformedURLException {
private String getBaseUrl() {
return baseUrl.getProtocol() + "://" + baseUrl.getHost() + ":" + baseUrl.getPort();
}
+
+ @Override
+ public String getLatestFromCommit() {
+ for (BitBucketPPRServerChange change : payload.getServerChanges()) {
+ if(change.getRefId() != null) {
+ return change.getFromHash();
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String getPayloadChangeType() {
+ for (BitBucketPPRServerChange change : payload.getServerChanges()) {
+ if(change.getRefId() != null) {
+ return change.getType();
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String getOPT1CloneUrl() {
+ return payload.getServerRepository().getLinks().getCloneProperty().get(0).getHref();
+ }
+
+ @Override
+ public String getOPT2CloneUrl() {
+ return payload.getServerRepository().getLinks().getCloneProperty().get(1).getHref();
+ }
}
diff --git a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/common/BitBucketPPRConst.java b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/common/BitBucketPPRConst.java
index ada053b8..e0e35e09 100644
--- a/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/common/BitBucketPPRConst.java
+++ b/src/main/java/io/jenkins/plugins/bitbucketpushandpullrequest/common/BitBucketPPRConst.java
@@ -61,6 +61,10 @@ public final class BitBucketPPRConst {
public static final String APPLICATION_X_WWW_FORM_URLENCODED =
"application/x-www-form-urlencoded";
+ public static final String PAYLOAD_CHANGE_TYPE_ADD = "ADD";
+ public static final String PAYLOAD_CHANGE_TYPE_DELETE = "DELETE";
+ public static final String EMPTY_HASH = "0000000000000000000000000000000000000000";
+
private BitBucketPPRConst() {
throw new AssertionError();
}