Skip to content

Support Jenkins2 pipeline #97

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>1.509.4</version><!-- which version of Jenkins is this plugin built against? -->
<version>1.596.1</version>
</parent>

<artifactId>bitbucket-pullrequest-builder</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

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;
Expand All @@ -12,25 +16,43 @@
* Created by nishio
*/
@Extension
public class BitbucketBuildListener extends RunListener<AbstractBuild> {
private static final Logger logger = Logger.getLogger(BitbucketBuildTrigger.class.getName());
public class BitbucketBuildListener extends RunListener<Run<?, ?>> {
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();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
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;
Expand All @@ -33,7 +34,7 @@
/**
* Created by nishio
*/
public class BitbucketBuildTrigger extends Trigger<AbstractProject<?, ?>> {
public class BitbucketBuildTrigger extends Trigger<Job<?, ?>> {
private static final Logger logger = Logger.getLogger(BitbucketBuildTrigger.class.getName());
private final String projectPath;
private final String cron;
Expand Down Expand Up @@ -153,7 +154,7 @@ public boolean getCancelOutdatedJobs() {
}

@Override
public void start(AbstractProject<?, ?> project, boolean newInstance) {
public void start(Job<?, ?> project, boolean newInstance) {
try {
this.bitbucketPullRequestsBuilder = BitbucketPullRequestsBuilder.getBuilder();
this.bitbucketPullRequestsBuilder.setProject(project);
Expand All @@ -175,6 +176,16 @@ public BitbucketPullRequestsBuilder getBuilder() {
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<String, ParameterValue> values = this.getDefaultParameters();

Expand All @@ -183,7 +194,10 @@ public QueueTaskFuture<?> startJob(BitbucketCause cause) {
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) {
Expand Down Expand Up @@ -239,12 +253,13 @@ private Map<String, ParameterValue> getDefaultParameters() {

@Override
public void run() {
if(this.getBuilder().getProject().isDisabled()) {
logger.info("Build Skip.");
} else {
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
Expand All @@ -259,7 +274,7 @@ public BitbucketBuildTriggerDescriptor() {

@Override
public boolean isApplicable(Item item) {
return true;
return item instanceof Job && item instanceof ParameterizedJobMixIn.ParameterizedJob;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -24,16 +21,7 @@ public BitbucketBuilds(BitbucketBuildTrigger trigger, BitbucketRepository reposi
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;
}
Expand All @@ -44,24 +32,21 @@ public void onStarted(AbstractBuild build) {
}
}

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());
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package bitbucketpullrequestbuilder.bitbucketpullrequestbuilder;

import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.Pullrequest;
import hudson.model.AbstractProject;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
Expand All @@ -11,14 +10,15 @@
import java.util.logging.Level;
import java.util.logging.Logger;

import hudson.model.Job;
import org.apache.commons.codec.binary.Hex;

/**
* Created by nishio
*/
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;
Expand Down Expand Up @@ -47,15 +47,15 @@ public BitbucketPullRequestsBuilder setupBuilder() {
return this;
}

public void setProject(AbstractProject<?, ?> project) {
public void setProject(Job<?, ?> project) {
this.project = project;
}

public void setTrigger(BitbucketBuildTrigger trigger) {
this.trigger = trigger;
}

public AbstractProject<?, ?> getProject() {
public Job<?, ?> getProject() {
return this.project;
}

Expand All @@ -73,6 +73,7 @@ public String getProjectId() {
logger.log(Level.WARNING, "Failed to produce hash", exc);
}
return this.project.getFullName();

}

public BitbucketBuildTrigger getTrigger() {
Expand Down