Skip to content

Commit d160d97

Browse files
committed
Fix PR build status and update of job description
BitbucketBuildListener was not invoked on pipeline jobs Change BitbucketBuildListener to extend from RunListener<Run<?, ?>> so it will invoked to update job description and PR build result
1 parent ee9862d commit d160d97

File tree

2 files changed

+40
-33
lines changed

2 files changed

+40
-33
lines changed

src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildListener.java

+35-13
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
import hudson.Extension;
44
import hudson.model.AbstractBuild;
5+
import hudson.model.Job;
6+
import hudson.model.Run;
57
import hudson.model.TaskListener;
68
import hudson.model.listeners.RunListener;
9+
import hudson.triggers.Trigger;
10+
import jenkins.model.ParameterizedJobMixIn;
711

812
import javax.annotation.Nonnull;
913
import java.util.logging.Logger;
@@ -12,25 +16,43 @@
1216
* Created by nishio
1317
*/
1418
@Extension
15-
public class BitbucketBuildListener extends RunListener<AbstractBuild> {
16-
private static final Logger logger = Logger.getLogger(BitbucketBuildTrigger.class.getName());
19+
public class BitbucketBuildListener extends RunListener<Run<?, ?>> {
20+
private static final Logger logger = Logger.getLogger(BitbucketBuildListener.class.getName());
1721

1822
@Override
19-
public void onStarted(AbstractBuild abstractBuild, TaskListener listener) {
20-
logger.info("BuildListener onStarted called.");
21-
BitbucketBuildTrigger trigger = BitbucketBuildTrigger.getTrigger(abstractBuild.getProject());
22-
if (trigger == null) {
23-
return;
23+
public void onStarted(Run r, TaskListener listener) {
24+
logger.info("BitbucketBuildListener onStarted called.");
25+
BitbucketBuilds builds = builds(r);
26+
if (builds != null) {
27+
builds.onStarted((BitbucketCause) r.getCause(BitbucketCause.class), r);
2428
}
25-
trigger.getBuilder().getBuilds().onStarted(abstractBuild);
2629
}
2730

2831
@Override
29-
public void onCompleted(AbstractBuild abstractBuild, @Nonnull TaskListener listener) {
30-
BitbucketBuildTrigger trigger = BitbucketBuildTrigger.getTrigger(abstractBuild.getProject());
31-
if (trigger == null) {
32-
return;
32+
public void onCompleted(Run r, @Nonnull TaskListener listener) {
33+
logger.info("BitbucketBuildListener onCompleted called.");
34+
BitbucketBuilds builds = builds(r);
35+
if (builds != null) {
36+
builds.onCompleted((BitbucketCause) r.getCause(BitbucketCause.class), r.getResult(), r.getUrl());
3337
}
34-
trigger.getBuilder().getBuilds().onCompleted(abstractBuild);
3538
}
39+
40+
private BitbucketBuilds builds(Run<?, ?> r) {
41+
BitbucketBuildTrigger trigger = null;
42+
if (r instanceof AbstractBuild) {
43+
trigger = BitbucketBuildTrigger.getTrigger(((AbstractBuild) r).getProject());
44+
} else {
45+
Job job = r.getParent();
46+
if (job instanceof ParameterizedJobMixIn.ParameterizedJob) {
47+
48+
for (Trigger<?> t : ((ParameterizedJobMixIn.ParameterizedJob) job).getTriggers().values()) {
49+
if (t instanceof BitbucketBuildTrigger) {
50+
trigger = (BitbucketBuildTrigger) t;
51+
}
52+
}
53+
}
54+
}
55+
return trigger == null ? null : trigger.getBuilder().getBuilds();
56+
}
57+
3658
}

src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuilds.java

+5-20
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package bitbucketpullrequestbuilder.bitbucketpullrequestbuilder;
22

33
import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BuildState;
4-
import hudson.model.AbstractBuild;
5-
import hudson.model.Cause;
6-
import hudson.model.Result;
7-
import jenkins.model.Jenkins;
4+
import hudson.model.*;
85
import jenkins.model.JenkinsLocationConfiguration;
96

107
import java.io.IOException;
@@ -24,16 +21,7 @@ public BitbucketBuilds(BitbucketBuildTrigger trigger, BitbucketRepository reposi
2421
this.repository = repository;
2522
}
2623

27-
public BitbucketCause getCause(AbstractBuild build) {
28-
Cause cause = build.getCause(BitbucketCause.class);
29-
if (cause == null || !(cause instanceof BitbucketCause)) {
30-
return null;
31-
}
32-
return (BitbucketCause) cause;
33-
}
34-
35-
public void onStarted(AbstractBuild build) {
36-
BitbucketCause cause = this.getCause(build);
24+
void onStarted(BitbucketCause cause, Run<?, ?> build) {
3725
if (cause == null) {
3826
return;
3927
}
@@ -44,24 +32,21 @@ public void onStarted(AbstractBuild build) {
4432
}
4533
}
4634

47-
public void onCompleted(AbstractBuild build) {
48-
BitbucketCause cause = this.getCause(build);
35+
void onCompleted(BitbucketCause cause, Result result, String buildUrl) {
4936
if (cause == null) {
5037
return;
5138
}
52-
Result result = build.getResult();
5339
JenkinsLocationConfiguration globalConfig = new JenkinsLocationConfiguration();
5440
String rootUrl = globalConfig.getUrl();
55-
String buildUrl = "";
5641
if (rootUrl == null) {
5742
logger.warning("PLEASE SET JENKINS ROOT URL IN GLOBAL CONFIGURATION FOR BUILD STATE REPORTING");
5843
} else {
59-
buildUrl = rootUrl + build.getUrl();
44+
buildUrl = rootUrl + buildUrl;
6045
BuildState state = result == Result.SUCCESS ? BuildState.SUCCESSFUL : BuildState.FAILED;
6146
repository.setBuildStatus(cause, state, buildUrl);
6247
}
6348

64-
if ( this.trigger.getApproveIfSuccess() && result == Result.SUCCESS ) {
49+
if (this.trigger.getApproveIfSuccess() && result == Result.SUCCESS) {
6550
this.repository.postPullRequestApproval(cause.getPullRequestId());
6651
}
6752
}

0 commit comments

Comments
 (0)