Skip to content

Commit 60a626d

Browse files
committed
Merge remote-tracking branch 'lvotypko/more-dsl-steps'
2 parents 6f94dc5 + 2b07ff0 commit 60a626d

File tree

5 files changed

+83
-10
lines changed

5 files changed

+83
-10
lines changed

docs/Home.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ Browse the Jenkins issue tracker to see any [open issues](https://issues.jenkins
4242
([JENKINS-51202](https://issues.jenkins-ci.org/browse/JENKINS-51202))
4343
* Fixed [[Dynamic DSL]] problem
4444
([JENKINS-57817](https://issues.jenkins-ci.org/browse/JENKINS-57817))
45+
* Fixed problems when using multiple Job DSL steps in a single seed job
46+
([JENKINS-29784](https://issues.jenkins-ci.org/browse/JENKINS-29784),
47+
[JENKINS-44142](https://issues.jenkins-ci.org/browse/JENKINS-44142))
4548
* 1.74 (May 01 2019)
4649
* Fixed [Configuration as Code](https://github.com/jenkinsci/configuration-as-code-plugin/) extension
4750
([JENKINS-57218](https://issues.jenkins-ci.org/browse/JENKINS-57218))

job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/ExecuteDslScripts.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import javaposse.jobdsl.plugin.actions.GeneratedUserContentsBuildAction;
4242
import javaposse.jobdsl.plugin.actions.GeneratedViewsAction;
4343
import javaposse.jobdsl.plugin.actions.GeneratedViewsBuildAction;
44+
import javaposse.jobdsl.plugin.actions.GeneratedObjectsRunAction;
4445
import jenkins.model.Jenkins;
4546
import jenkins.model.ParameterizedJobMixIn.ParameterizedJob;
4647
import jenkins.tasks.SimpleBuildStep;
@@ -357,17 +358,17 @@ public void perform(@Nonnull Run<?, ?> run, @Nonnull FilePath workspace, @Nonnul
357358
Set<GeneratedConfigFile> freshConfigFiles = generatedItems.getConfigFiles();
358359
Set<GeneratedUserContent> freshUserContents = generatedItems.getUserContents();
359360

360-
updateTemplates(run.getParent(), listener, freshJobs);
361-
updateGeneratedJobs(run.getParent(), listener, freshJobs);
362-
updateGeneratedViews(run.getParent(), listener, freshViews);
363-
updateGeneratedConfigFiles(run.getParent(), listener, freshConfigFiles);
364-
updateGeneratedUserContents(run.getParent(), listener, freshUserContents);
365-
366361
// Save onto Builder, which belongs to a Project.
367-
run.addAction(new GeneratedJobsBuildAction(freshJobs, getLookupStrategy()));
368-
run.addAction(new GeneratedViewsBuildAction(freshViews, getLookupStrategy()));
369-
run.addAction(new GeneratedConfigFilesBuildAction(freshConfigFiles));
370-
run.addAction(new GeneratedUserContentsBuildAction(freshUserContents));
362+
addJobAction(run, new GeneratedJobsBuildAction(freshJobs, getLookupStrategy()));
363+
addJobAction(run, new GeneratedViewsBuildAction(freshViews, getLookupStrategy()));
364+
addJobAction(run, new GeneratedConfigFilesBuildAction(freshConfigFiles));
365+
addJobAction(run, new GeneratedUserContentsBuildAction(freshUserContents));
366+
367+
updateTemplates(run.getParent(), listener, new HashSet<GeneratedJob>(run.getAction(GeneratedJobsBuildAction.class).getModifiedObjects()));
368+
updateGeneratedJobs(run.getParent(), listener, new HashSet<GeneratedJob>(run.getAction(GeneratedJobsBuildAction.class).getModifiedObjects()));
369+
updateGeneratedViews(run.getParent(), listener, new HashSet<GeneratedView>(run.getAction(GeneratedViewsBuildAction.class).getModifiedObjects()));
370+
updateGeneratedConfigFiles(run.getParent(), listener, new HashSet<GeneratedConfigFile>(run.getAction(GeneratedConfigFilesBuildAction.class).getModifiedObjects()));
371+
updateGeneratedUserContents(run.getParent(), listener, new HashSet<GeneratedUserContent>(run.getAction(GeneratedUserContentsBuildAction.class).getModifiedObjects()));
371372
}
372373
} catch (RuntimeException e) {
373374
if (!(e instanceof DslException) && !(e instanceof AccessDeniedException)) {
@@ -378,6 +379,16 @@ public void perform(@Nonnull Run<?, ?> run, @Nonnull FilePath workspace, @Nonnul
378379
}
379380
}
380381

382+
private void addJobAction(Run run, GeneratedObjectsRunAction action){
383+
GeneratedObjectsRunAction generatedJobsBuildAction = run.getAction(action.getClass());
384+
if (generatedJobsBuildAction == null) {
385+
run.addAction(action);
386+
}
387+
else {
388+
generatedJobsBuildAction.addModifiedObjects(action.getModifiedObjects());
389+
}
390+
}
391+
381392
/**
382393
* Uses generatedJobs as existing data, so call before updating generatedJobs.
383394
*/

job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/actions/GeneratedObjectsAction.groovy

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ abstract class GeneratedObjectsAction<T, B extends GeneratedObjectsRunAction<T>>
1919

2020
Set<T> findLastGeneratedObjects() {
2121
for (Run run = job.lastBuild; run != null; run = run.previousBuild) {
22+
if (run.isBuilding()) {
23+
continue
24+
}
2225
B action = run.getAction(buildActionClass)
2326
if (action != null && action.modifiedObjects != null) {
2427
return action.modifiedObjects

job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/actions/GeneratedObjectsRunAction.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,13 @@ public void onAttached(Run run) {
4646
public Collection<T> getModifiedObjects() {
4747
return modifiedObjects == null ? null : new TreeSet<>(modifiedObjects);
4848
}
49+
50+
public void addModifiedObjects(Collection<T> modifiedObjects) {
51+
if (this.modifiedObjects == null) {
52+
throw new IllegalStateException("Modified object should not be null. Probably wrong state after serialization/deserialization");
53+
} else {
54+
this.modifiedObjects.addAll(modifiedObjects);
55+
}
56+
}
57+
4958
}

job-dsl-plugin/src/test/groovy/javaposse/jobdsl/plugin/ExecuteDslScriptsSpec.groovy

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,43 @@ folder('folder-a/folder-b') {
490490
jenkinsRule.jenkins.getItemByFullName('test-job') == null
491491
}
492492
493+
def oneActionForMultipleStep() {
494+
setup:
495+
FreeStyleProject job = jenkinsRule.createFreeStyleProject('seed')
496+
497+
when:
498+
List builders = []
499+
builders.add(new ExecuteDslScripts('job("test-job")'))
500+
builders.add(new ExecuteDslScripts('job("test-job2")'))
501+
//builder1.removedJobAction = RemovedJobAction.DELETE
502+
runBuild(job, builders)
503+
504+
then:
505+
jenkinsRule.jenkins.getItemByFullName('seed').getActions(GeneratedJobsAction).size() == 1
506+
}
507+
508+
def doNotGetRemoveJobActionFromRunningBuild() {
509+
setup:
510+
FreeStyleProject job = jenkinsRule.createFreeStyleProject('seed')
511+
512+
when:
513+
List builders = []
514+
builders.add(new ExecuteDslScripts('job("test-job")'))
515+
builders.add(new ExecuteDslScripts('job("test-job2")'))
516+
ExecuteDslScripts builder = new ExecuteDslScripts('job("test-job3")')
517+
builder.removedJobAction = RemovedJobAction.DELETE
518+
builders.add(builder)
519+
520+
runBuild(job, builders)
521+
builders.remove(0)
522+
runBuild(job, builders)
523+
524+
then:
525+
jenkinsRule.jenkins.getItemByFullName('test-job2') != null
526+
jenkinsRule.jenkins.getItemByFullName('test-job3') != null
527+
jenkinsRule.jenkins.getItemByFullName('test-job') == null
528+
}
529+
493530
def deleteJobInFolder() {
494531
setup:
495532
jenkinsRule.jenkins.createProject(Folder, 'folder')
@@ -1856,6 +1893,16 @@ folder('folder-a/folder-b') {
18561893
build
18571894
}
18581895
1896+
private static FreeStyleBuild runBuild(FreeStyleProject job, List<ExecuteDslScripts> builders) {
1897+
job.buildersList.clear()
1898+
job.buildersList.addAll(builders)
1899+
1900+
FreeStyleBuild build = job.scheduleBuild2(0).get()
1901+
1902+
assert build.result == SUCCESS
1903+
build
1904+
}
1905+
18591906
private static final class QIA extends QueueItemAuthenticator {
18601907
private final String user
18611908
private final String item

0 commit comments

Comments
 (0)