10
10
import com .cloudbees .plugins .credentials .domains .URIRequirementBuilder ;
11
11
import edu .umd .cs .findbugs .annotations .SuppressFBWarnings ;
12
12
import hudson .Extension ;
13
- import hudson .model .AbstractProject ;
14
13
import hudson .model .Build ;
15
14
import hudson .model .Cause ;
15
+ import hudson .model .CauseAction ;
16
16
import hudson .model .Item ;
17
+ import hudson .model .Job ;
17
18
import hudson .model .ParameterDefinition ;
18
19
import hudson .model .ParameterValue ;
19
20
import hudson .model .ParametersAction ;
37
38
import javax .annotation .Nonnull ;
38
39
import javax .annotation .Nullable ;
39
40
import jenkins .model .Jenkins ;
41
+ import jenkins .model .ParameterizedJobMixIn ;
40
42
import net .sf .json .JSONObject ;
43
+ import org .acegisecurity .Authentication ;
41
44
import org .apache .commons .lang .StringUtils ;
42
45
import org .kohsuke .stapler .AncestorInPath ;
43
46
import org .kohsuke .stapler .DataBoundConstructor ;
47
50
48
51
/** Created by Nathan McCarthy */
49
52
@ SuppressFBWarnings ({"WMI_WRONG_MAP_ITERATOR" , "NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE" })
50
- public class StashBuildTrigger extends Trigger <AbstractProject <?, ?>> {
53
+ public class StashBuildTrigger extends Trigger <Job <?, ?>> {
51
54
private static final Logger logger =
52
55
Logger .getLogger (MethodHandles .lookup ().lookupClass ().getName ());
53
56
private final String projectPath ;
@@ -138,11 +141,16 @@ public String getcredentialsId() {
138
141
}
139
142
140
143
private StandardUsernamePasswordCredentials getCredentials () {
144
+ Authentication defaultAuth = null ;
145
+ if (job instanceof Queue .Task ) {
146
+ defaultAuth = Tasks .getDefaultAuthenticationOf ((Queue .Task ) job );
147
+ }
148
+
141
149
return CredentialsMatchers .firstOrNull (
142
150
CredentialsProvider .lookupCredentials (
143
151
StandardUsernamePasswordCredentials .class ,
144
152
this .job ,
145
- Tasks . getDefaultAuthenticationOf ( this . job ) ,
153
+ defaultAuth ,
146
154
URIRequirementBuilder .fromUri (stashHost ).build ()),
147
155
CredentialsMatchers .allOf (CredentialsMatchers .withId (credentialsId )));
148
156
}
@@ -196,19 +204,26 @@ public boolean isCancelOutdatedJobsEnabled() {
196
204
}
197
205
198
206
@ Override
199
- public void start (AbstractProject <?, ?> project , boolean newInstance ) {
207
+ public void start (Job <?, ?> job , boolean newInstance ) {
200
208
try {
201
- Objects .requireNonNull (project , "project is null" );
202
- this .stashPullRequestsBuilder = new StashPullRequestsBuilder (project , this );
209
+ Objects .requireNonNull (job , "job is null" );
210
+ this .stashPullRequestsBuilder = new StashPullRequestsBuilder (job , this );
203
211
} catch (NullPointerException e ) {
204
212
logger .log (Level .SEVERE , "Can't start trigger" , e );
205
213
return ;
206
214
}
207
- super .start (project , newInstance );
215
+ super .start (job , newInstance );
208
216
}
209
217
210
- public static StashBuildTrigger getTrigger (AbstractProject project ) {
211
- Trigger trigger = project .getTrigger (StashBuildTrigger .class );
218
+ public static StashBuildTrigger getTrigger (Job job ) {
219
+ if (!(job instanceof ParameterizedJobMixIn .ParameterizedJob )) {
220
+ return null ;
221
+ }
222
+
223
+ ParameterizedJobMixIn .ParameterizedJob parameterizedJob =
224
+ (ParameterizedJobMixIn .ParameterizedJob ) job ;
225
+
226
+ Trigger trigger = parameterizedJob .getTriggers ().get (descriptor );
212
227
return (StashBuildTrigger ) trigger ;
213
228
}
214
229
@@ -231,7 +246,21 @@ public QueueTaskFuture<?> startJob(StashCause cause) {
231
246
abortRunningJobsThatMatch (cause );
232
247
}
233
248
234
- return job .scheduleBuild2 (job .getQuietPeriod (), cause , new ParametersAction (values ));
249
+ ParameterizedJobMixIn jobMixIn =
250
+ new ParameterizedJobMixIn () {
251
+ @ Override
252
+ protected Job asJob () {
253
+ return StashBuildTrigger .this .job ;
254
+ }
255
+ };
256
+
257
+ int quietPeriod = Jenkins .getInstance ().getQuietPeriod ();
258
+ if (job instanceof ParameterizedJobMixIn .ParameterizedJob ) {
259
+ quietPeriod = ((ParameterizedJobMixIn .ParameterizedJob ) job ).getQuietPeriod ();
260
+ }
261
+
262
+ return jobMixIn .scheduleBuild2 (
263
+ quietPeriod , new CauseAction (cause ), new ParametersAction (values ));
235
264
}
236
265
237
266
private void cancelPreviousJobsInQueueThatMatch (@ Nonnull StashCause stashCause ) {
@@ -300,9 +329,9 @@ public void run() {
300
329
return ;
301
330
}
302
331
303
- AbstractProject project = stashPullRequestsBuilder .getProject ();
304
- if (project . isDisabled ()) {
305
- logger .fine (format ("Project disabled, skipping build (%s)." , project .getName ()));
332
+ Job <?, ?> job = stashPullRequestsBuilder .getJob ();
333
+ if (job . isBuildable ()) {
334
+ logger .fine (format ("Project disabled, skipping build (%s)." , job .getName ()));
306
335
return ;
307
336
}
308
337
0 commit comments