Skip to content

Commit

Permalink
Merge pull request #26 from fbelzunc/JENKINS-32372
Browse files Browse the repository at this point in the history
[FIXED JENKINS-32372] Inject the payload into the build
  • Loading branch information
fbelzunc committed Jan 20, 2016
2 parents 493324c + 4337e22 commit ca70985
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 7 deletions.
37 changes: 37 additions & 0 deletions src/main/java/com/cloudbees/jenkins/plugins/BitBucketPayload.java
@@ -0,0 +1,37 @@
package com.cloudbees.jenkins.plugins;

import hudson.EnvVars;
import hudson.model.AbstractBuild;
import hudson.model.EnvironmentContributingAction;
import hudson.model.InvisibleAction;

import javax.annotation.Nonnull;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* Inject the payload received by BitBucket into the build through $BITBUCKET_PAYLOAD so it can be processed
* @since January 9, 2016
* @version 1.1.5
*/
public class BitBucketPayload extends InvisibleAction implements EnvironmentContributingAction {
private final @Nonnull String payload;

public BitBucketPayload(@Nonnull String payload) {
this.payload = payload;
}

@Nonnull
public String getPayload() {
return payload;
}

@Override
public void buildEnvVars(AbstractBuild<?, ?> abstractBuild, EnvVars envVars) {
final String payload = getPayload();
LOGGER.log(Level.FINEST, "Injecting BITBUCKET_PAYLOAD: {0}", payload);
envVars.put("BITBUCKET_PAYLOAD", payload);
}

private static final Logger LOGGER = Logger.getLogger(BitBucketPayload.class.getName());
}
11 changes: 11 additions & 0 deletions src/main/java/com/cloudbees/jenkins/plugins/BitBucketTrigger.java
Expand Up @@ -4,6 +4,7 @@
import hudson.Util;
import hudson.console.AnnotatedLargeText;
import hudson.model.Action;
import hudson.model.CauseAction;
import hudson.model.Hudson;
import hudson.model.Item;
import hudson.model.Job;
Expand Down Expand Up @@ -40,7 +41,15 @@ public BitBucketTrigger() {
/**
* Called when a POST is made.
*/
@Deprecated
public void onPost(String triggeredByUser) {
onPost(triggeredByUser, "");
}

/**
* Called when a POST is made.
*/
public void onPost(String triggeredByUser, final String payload) {
final String pushBy = triggeredByUser;
getDescriptor().queue.execute(new Runnable() {
private boolean runPolling() {
Expand Down Expand Up @@ -89,6 +98,8 @@ public void run() {
return job;
}
};
BitBucketPayload bitBucketPayload = new BitBucketPayload(payload);
pJob.scheduleBuild2(5, new CauseAction(cause), bitBucketPayload);
if (pJob.scheduleBuild(cause)) {
LOGGER.info("SCM changes detected in "+ job.getName()+". Triggering "+ name);
} else {
Expand Down
Expand Up @@ -27,7 +27,12 @@

public class BitbucketJobProbe {

@Deprecated
public void triggerMatchingJobs(String user, String url, String scm) {
triggerMatchingJobs(user, url, scm, "");
}

public void triggerMatchingJobs(String user, String url, String scm, String payload) {
if ("git".equals(scm) || "hg".equals(scm)) {
SecurityContext old = Jenkins.getInstance().getACL().impersonate(ACL.SYSTEM);
try {
Expand All @@ -53,7 +58,7 @@ public void triggerMatchingJobs(String user, String url, String scm) {
if (match(scmTrigger, remote) && !hasBeenTriggered(scmTriggered, scmTrigger)) {
LOGGER.log(Level.INFO, "Triggering BitBucket job {0}", job.getName());
scmTriggered.add(scmTrigger);
bTrigger.onPost(user);
bTrigger.onPost(user, payload);
} else LOGGER.log(Level.FINE, "{0} SCM doesn't match remote repo {1}", new Object[]{job.getName(), remote});
}
} else
Expand Down
Expand Up @@ -40,14 +40,14 @@ private void processWebhookPayload(JSONObject payload) {
String url = repo.getJSONObject("links").getJSONObject("html").getString("href");
String scm = repo.has("scm") ? repo.getString("scm") : "git";

probe.triggerMatchingJobs(user, url, scm);
probe.triggerMatchingJobs(user, url, scm, payload.toString());
} else if (payload.has("scm")) {
LOGGER.log(Level.INFO, "Received commit hook notification for hg: {0}", payload);
String user = payload.getJSONObject("owner").getString("username");
String url = payload.getJSONObject("links").getJSONObject("html").getString("href");
String scm = payload.has("scm") ? payload.getString("scm") : "hg";

probe.triggerMatchingJobs(user, url, scm);
probe.triggerMatchingJobs(user, url, scm, payload.toString());
}

}
Expand Down Expand Up @@ -99,7 +99,7 @@ private void processPostServicePayload(JSONObject payload) {
String url = payload.getString("canon_url") + repo.getString("absolute_url");
String scm = repo.getString("scm");

probe.triggerMatchingJobs(user, url, scm);
probe.triggerMatchingJobs(user, url, scm, payload.toString());
}

private static final Logger LOGGER = Logger.getLogger(BitbucketPayloadProcessor.class.getName());
Expand Down
Expand Up @@ -53,11 +53,11 @@ public void testProcessWebhookPayload() {

payloadProcessor.processPayload(payload, request);

verify(probe).triggerMatchingJobs(user, url, "git");
verify(probe).triggerMatchingJobs(user, url, "git", payload.toString());

payloadProcessor.processPayload(hgLoad, request);

verify(probe).triggerMatchingJobs(user, url, "hg");
verify(probe).triggerMatchingJobs(user, url, "hg", hgLoad.toString());
}

@Test
Expand All @@ -74,7 +74,7 @@ public void testProcessPostServicePayload() {

payloadProcessor.processPayload(payload, request);

verify(probe).triggerMatchingJobs("old_user", "https://staging.bitbucket.org/old_user/old_repo", "git");
verify(probe).triggerMatchingJobs("old_user", "https://staging.bitbucket.org/old_user/old_repo", "git", payload.toString());
}

}

0 comments on commit ca70985

Please sign in to comment.