forked from jenkinsci/jira-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJiraIssueUpdater.java
More file actions
149 lines (131 loc) · 4.62 KB
/
JiraIssueUpdater.java
File metadata and controls
149 lines (131 loc) · 4.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package hudson.plugins.jira;
import hudson.EnvVars;
import hudson.Extension;
import hudson.Launcher;
import hudson.matrix.MatrixAggregatable;
import hudson.matrix.MatrixAggregator;
import hudson.matrix.MatrixBuild;
import hudson.matrix.MatrixRun;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.plugins.jira.selector.AbstractIssueSelector;
import hudson.plugins.jira.selector.DefaultIssueSelector;
import hudson.scm.SCM;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Publisher;
import hudson.tasks.Recorder;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import jenkins.model.Jenkins;
import jenkins.tasks.SimpleBuildStep;
import org.jenkinsci.Symbol;
import org.kohsuke.stapler.DataBoundConstructor;
/**
* Parses build changelog for Jira issue IDs and then
* updates Jira issues accordingly.
*
* @author Kohsuke Kawaguchi
*/
public class JiraIssueUpdater extends Recorder implements MatrixAggregatable, SimpleBuildStep {
private AbstractIssueSelector issueSelector;
private SCM scm;
private List<String> labels;
@DataBoundConstructor
public JiraIssueUpdater(AbstractIssueSelector issueSelector, SCM scm, List<String> labels) {
this.issueSelector = issueSelector;
this.scm = scm;
if (labels != null) {
this.labels = labels;
} else {
this.labels = new ArrayList();
}
}
@Override
public void perform(Run<?, ?> run, EnvVars env, TaskListener listener) throws InterruptedException, IOException {
// Don't do anything for individual matrix runs.
if (run instanceof MatrixRun) {
return;
} else if (run instanceof AbstractBuild) {
AbstractBuild<?, ?> abstractBuild = (AbstractBuild<?, ?>) run;
Updater updater = new Updater(abstractBuild.getParent().getScm(), labels);
updater.perform(run, listener, getIssueSelector());
} else if (scm != null) {
Updater updater = new Updater(scm, labels);
updater.perform(run, listener, getIssueSelector());
} else {
throw new IllegalArgumentException(
"Unsupported run type " + run.getClass().getName());
}
}
@Override
public boolean requiresWorkspace() {
return false;
}
@Override
public BuildStepMonitor getRequiredMonitorService() {
return BuildStepMonitor.NONE;
}
@Override
public DescriptorImpl getDescriptor() {
return DESCRIPTOR;
}
public AbstractIssueSelector getIssueSelector() {
AbstractIssueSelector uis = this.issueSelector;
if (uis == null) {
uis = new DefaultIssueSelector();
}
return (this.issueSelector = uis);
}
public SCM getScm() {
return scm;
}
public List<String> getLabels() {
return labels;
}
@Extension
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
@Override
public MatrixAggregator createAggregator(MatrixBuild build, Launcher launcher, BuildListener listener) {
return new MatrixAggregator(build, launcher, listener) {
@Override
public boolean endBuild() throws InterruptedException, IOException {
PrintStream logger = listener.getLogger();
logger.println("End of Matrix Build. Updating Jira.");
Updater updater = new Updater(this.build.getParent().getScm(), labels);
return updater.perform(this.build, this.listener, getIssueSelector());
}
};
}
@Symbol("jiraCommentIssues")
public static final class DescriptorImpl extends BuildStepDescriptor<Publisher> {
private DescriptorImpl() {
super(JiraIssueUpdater.class);
}
@Override
public String getDisplayName() {
// Displayed in the publisher section
return Messages.JiraIssueUpdater_DisplayName();
}
@Override
public String getHelpFile() {
return "/plugin/jira/help.html";
}
@Override
@SuppressWarnings("unchecked")
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return true;
}
public boolean hasIssueSelectors() {
return Jenkins.getInstance()
.getDescriptorList(AbstractIssueSelector.class)
.size()
> 1;
}
}
}