From 5472f5a59f1c004d4a85a574b5c158af88570f30 Mon Sep 17 00:00:00 2001 From: Frode Aannevik Date: Fri, 5 Aug 2016 22:18:52 +0200 Subject: bump org.jenkins-ci.plugins:plugin to 1.596.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fb23ec8..98d2446 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ org.jenkins-ci.plugins plugin - 1.509.4 + 1.596.1 bitbucket-pullrequest-builder -- cgit v1.2.3 From 725311827f86f49edcbbee1988f281dee4c6b4f2 Mon Sep 17 00:00:00 2001 From: Frode Aannevik Date: Fri, 5 Aug 2016 22:53:48 +0200 Subject: Add support for Jenkins 2 (incomplete) Replace use of AbstractProject with Job to fix ClassCastException thrown when using the plugin in a pipeline job The fix is "not" complete, it remains to find a replacement to the call AbstractProject.isDisabled used to decide if the build should be skipped Previously called in BitbucketBuildTrigger.run() fixes #94 --- .../BitbucketBuildTrigger.java | 29 +++++++++++++++------- .../BitbucketPullRequestsBuilder.java | 9 ++++--- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildTrigger.java b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildTrigger.java index 90de6b5..373c228 100644 --- a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildTrigger.java +++ b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildTrigger.java @@ -14,6 +14,7 @@ import hudson.triggers.Trigger; import hudson.triggers.TriggerDescriptor; import hudson.util.ListBoxModel; import jenkins.model.Jenkins; +import jenkins.model.ParameterizedJobMixIn; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.kohsuke.stapler.DataBoundConstructor; @@ -33,7 +34,7 @@ import static com.cloudbees.plugins.credentials.CredentialsMatchers.instanceOf; /** * Created by nishio */ -public class BitbucketBuildTrigger extends Trigger> { +public class BitbucketBuildTrigger extends Trigger> { private static final Logger logger = Logger.getLogger(BitbucketBuildTrigger.class.getName()); private final String projectPath; private final String cron; @@ -153,7 +154,7 @@ public class BitbucketBuildTrigger extends Trigger> { } @Override - public void start(AbstractProject project, boolean newInstance) { + public void start(Job project, boolean newInstance) { try { this.bitbucketPullRequestsBuilder = BitbucketPullRequestsBuilder.getBuilder(); this.bitbucketPullRequestsBuilder.setProject(project); @@ -175,6 +176,16 @@ public class BitbucketBuildTrigger extends Trigger> { return this.bitbucketPullRequestsBuilder; } + private ParameterizedJobMixIn retrieveScheduleJob(final Job job) { + // TODO 1.621+ use standard method + return new ParameterizedJobMixIn() { + @Override + protected Job asJob() { + return job; + } + }; + } + public QueueTaskFuture startJob(BitbucketCause cause) { Map values = this.getDefaultParameters(); @@ -183,7 +194,10 @@ public class BitbucketBuildTrigger extends Trigger> { abortRunningJobsThatMatch(cause); } - return this.job.scheduleBuild2(0, cause, new ParametersAction(new ArrayList(values.values())), new RevisionParameterAction(cause.getSourceCommitHash())); + return retrieveScheduleJob(this.job).scheduleBuild2(0, + new CauseAction(cause), + new ParametersAction(new ArrayList(values.values())), + new RevisionParameterAction(cause.getSourceCommitHash())); } private void cancelPreviousJobsInQueueThatMatch(@Nonnull BitbucketCause bitbucketCause) { @@ -239,11 +253,8 @@ public class BitbucketBuildTrigger extends Trigger> { @Override public void run() { - if(this.getBuilder().getProject().isDisabled()) { - logger.info("Build Skip."); - } else { - this.bitbucketPullRequestsBuilder.run(); - } + logger.log(Level.INFO, "TODO: check if project is disabled before calling bitbucketPullRequestsBuilder.run()"); + this.bitbucketPullRequestsBuilder.run(); this.getDescriptor().save(); } @@ -259,7 +270,7 @@ public class BitbucketBuildTrigger extends Trigger> { @Override public boolean isApplicable(Item item) { - return true; + return item instanceof Job && item instanceof ParameterizedJobMixIn.ParameterizedJob; } @Override diff --git a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketPullRequestsBuilder.java b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketPullRequestsBuilder.java index 899edba..42fe562 100644 --- a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketPullRequestsBuilder.java +++ b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketPullRequestsBuilder.java @@ -1,7 +1,6 @@ package bitbucketpullrequestbuilder.bitbucketpullrequestbuilder; import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.Pullrequest; -import hudson.model.AbstractProject; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; @@ -11,6 +10,7 @@ import java.util.Collection; import java.util.logging.Level; import java.util.logging.Logger; +import hudson.model.Job; import org.apache.commons.codec.binary.Hex; /** @@ -18,7 +18,7 @@ import org.apache.commons.codec.binary.Hex; */ public class BitbucketPullRequestsBuilder { private static final Logger logger = Logger.getLogger(BitbucketBuildTrigger.class.getName()); - private AbstractProject project; + private Job project; private BitbucketBuildTrigger trigger; private BitbucketRepository repository; private BitbucketBuilds builds; @@ -47,7 +47,7 @@ public class BitbucketPullRequestsBuilder { return this; } - public void setProject(AbstractProject project) { + public void setProject(Job project) { this.project = project; } @@ -55,7 +55,7 @@ public class BitbucketPullRequestsBuilder { this.trigger = trigger; } - public AbstractProject getProject() { + public Job getProject() { return this.project; } @@ -73,6 +73,7 @@ public class BitbucketPullRequestsBuilder { logger.log(Level.WARNING, "Failed to produce hash", exc); } return this.project.getFullName(); + } public BitbucketBuildTrigger getTrigger() { -- cgit v1.2.3 From 066fc6386f08729ac2861e29b4bba91427541724 Mon Sep 17 00:00:00 2001 From: Gazal K Date: Tue, 7 Feb 2017 15:26:14 +1100 Subject: check for disabled build for older jobs looks like pipeline jobs don't have a disable option --- .../bitbucketpullrequestbuilder/BitbucketBuildTrigger.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildTrigger.java b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildTrigger.java index 373c228..846ecb5 100644 --- a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildTrigger.java +++ b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildTrigger.java @@ -253,9 +253,13 @@ public class BitbucketBuildTrigger extends Trigger> { @Override public void run() { - logger.log(Level.INFO, "TODO: check if project is disabled before calling bitbucketPullRequestsBuilder.run()"); - this.bitbucketPullRequestsBuilder.run(); - this.getDescriptor().save(); + Job project = this.getBuilder().getProject(); + if (project instanceof AbstractProject && ((AbstractProject)project).isDisabled()) { + logger.info("Build Skip."); + } else { + this.bitbucketPullRequestsBuilder.run(); + this.getDescriptor().save(); + } } @Override -- cgit v1.2.3 From 0debdfbdf1846f74928e0c4e932475b77e655a06 Mon Sep 17 00:00:00 2001 From: Frode Aannevik Date: Sun, 12 Feb 2017 17:05:15 +0100 Subject: Fix PR build status and update of job description BitbucketBuildListener was not invoked on pipeline jobs Change BitbucketBuildListener to extend from RunListener> so it will invoked to update job description and PR build result --- .../BitbucketBuildListener.java | 48 ++++++++++++++++------ .../BitbucketBuilds.java | 25 +++-------- 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildListener.java b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildListener.java index 95931ad..9e067e7 100644 --- a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildListener.java +++ b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildListener.java @@ -2,8 +2,12 @@ package bitbucketpullrequestbuilder.bitbucketpullrequestbuilder; import hudson.Extension; import hudson.model.AbstractBuild; +import hudson.model.Job; +import hudson.model.Run; import hudson.model.TaskListener; import hudson.model.listeners.RunListener; +import hudson.triggers.Trigger; +import jenkins.model.ParameterizedJobMixIn; import javax.annotation.Nonnull; import java.util.logging.Logger; @@ -12,25 +16,43 @@ import java.util.logging.Logger; * Created by nishio */ @Extension -public class BitbucketBuildListener extends RunListener { - private static final Logger logger = Logger.getLogger(BitbucketBuildTrigger.class.getName()); +public class BitbucketBuildListener extends RunListener> { + private static final Logger logger = Logger.getLogger(BitbucketBuildListener.class.getName()); @Override - public void onStarted(AbstractBuild abstractBuild, TaskListener listener) { - logger.info("BuildListener onStarted called."); - BitbucketBuildTrigger trigger = BitbucketBuildTrigger.getTrigger(abstractBuild.getProject()); - if (trigger == null) { - return; + public void onStarted(Run r, TaskListener listener) { + logger.info("BitbucketBuildListener onStarted called."); + BitbucketBuilds builds = builds(r); + if (builds != null) { + builds.onStarted((BitbucketCause) r.getCause(BitbucketCause.class), r); } - trigger.getBuilder().getBuilds().onStarted(abstractBuild); } @Override - public void onCompleted(AbstractBuild abstractBuild, @Nonnull TaskListener listener) { - BitbucketBuildTrigger trigger = BitbucketBuildTrigger.getTrigger(abstractBuild.getProject()); - if (trigger == null) { - return; + public void onCompleted(Run r, @Nonnull TaskListener listener) { + logger.info("BitbucketBuildListener onCompleted called."); + BitbucketBuilds builds = builds(r); + if (builds != null) { + builds.onCompleted((BitbucketCause) r.getCause(BitbucketCause.class), r.getResult(), r.getUrl()); } - trigger.getBuilder().getBuilds().onCompleted(abstractBuild); } + + private BitbucketBuilds builds(Run r) { + BitbucketBuildTrigger trigger = null; + if (r instanceof AbstractBuild) { + trigger = BitbucketBuildTrigger.getTrigger(((AbstractBuild) r).getProject()); + } else { + Job job = r.getParent(); + if (job instanceof ParameterizedJobMixIn.ParameterizedJob) { + + for (Trigger t : ((ParameterizedJobMixIn.ParameterizedJob) job).getTriggers().values()) { + if (t instanceof BitbucketBuildTrigger) { + trigger = (BitbucketBuildTrigger) t; + } + } + } + } + return trigger == null ? null : trigger.getBuilder().getBuilds(); + } + } diff --git a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuilds.java b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuilds.java index ea8e892..216287d 100644 --- a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuilds.java +++ b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuilds.java @@ -1,10 +1,7 @@ package bitbucketpullrequestbuilder.bitbucketpullrequestbuilder; import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BuildState; -import hudson.model.AbstractBuild; -import hudson.model.Cause; -import hudson.model.Result; -import jenkins.model.Jenkins; +import hudson.model.*; import jenkins.model.JenkinsLocationConfiguration; import java.io.IOException; @@ -24,16 +21,7 @@ public class BitbucketBuilds { this.repository = repository; } - public BitbucketCause getCause(AbstractBuild build) { - Cause cause = build.getCause(BitbucketCause.class); - if (cause == null || !(cause instanceof BitbucketCause)) { - return null; - } - return (BitbucketCause) cause; - } - - public void onStarted(AbstractBuild build) { - BitbucketCause cause = this.getCause(build); + void onStarted(BitbucketCause cause, Run build) { if (cause == null) { return; } @@ -44,24 +32,21 @@ public class BitbucketBuilds { } } - public void onCompleted(AbstractBuild build) { - BitbucketCause cause = this.getCause(build); + void onCompleted(BitbucketCause cause, Result result, String buildUrl) { if (cause == null) { return; } - Result result = build.getResult(); JenkinsLocationConfiguration globalConfig = new JenkinsLocationConfiguration(); String rootUrl = globalConfig.getUrl(); - String buildUrl = ""; if (rootUrl == null) { logger.warning("PLEASE SET JENKINS ROOT URL IN GLOBAL CONFIGURATION FOR BUILD STATE REPORTING"); } else { - buildUrl = rootUrl + build.getUrl(); + buildUrl = rootUrl + buildUrl; BuildState state = result == Result.SUCCESS ? BuildState.SUCCESSFUL : BuildState.FAILED; repository.setBuildStatus(cause, state, buildUrl); } - if ( this.trigger.getApproveIfSuccess() && result == Result.SUCCESS ) { + if (this.trigger.getApproveIfSuccess() && result == Result.SUCCESS) { this.repository.postPullRequestApproval(cause.getPullRequestId()); } } -- cgit v1.2.3