Skip to content

Commit 1241620

Browse files
committed
Allow passing values from casc yaml to job dsl.
1 parent 3fec4c9 commit 1241620

File tree

4 files changed

+46
-7
lines changed

4 files changed

+46
-7
lines changed

docs/JCasC.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
- url: https://raw.githubusercontent.com/jenkinsci/job-dsl-plugin/master/job-dsl-plugin/src/test/resources/javaposse/jobdsl/plugin/testjob.groovy
3131
```
3232
33-
you can reference multiple scripts, files, and urls
33+
You can reference multiple scripts, files, and urls
3434
3535
```yml
3636
jobs:
@@ -63,3 +63,19 @@ jobs:
6363
- file: ./jobdsl/job1.groovy
6464
- file: ./jobdsl/job2.groovy
6565
```
66+
67+
You can pass values from the yaml file to the job dsl script
68+
69+
```yml
70+
jobs:
71+
- providedEnv:
72+
SUPERHERO: 'Midnighter'
73+
- file: ./jobdsl/job.groovy
74+
```
75+
76+
```groovy
77+
//job.groovy
78+
job('awesome-job') {
79+
description("favorite job of ${SUPERHERO}")
80+
}
81+
```

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

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010
import io.jenkins.plugins.casc.impl.attributes.MultivaluedAttribute;
1111
import io.jenkins.plugins.casc.model.CNode;
1212
import io.jenkins.plugins.casc.model.Mapping;
13-
import java.util.Map;
13+
14+
import java.util.*;
15+
import java.util.stream.Stream;
16+
1417
import javaposse.jobdsl.dsl.GeneratedItems;
1518
import javaposse.jobdsl.plugin.JenkinsDslScriptLoader;
1619
import javaposse.jobdsl.plugin.JenkinsJobManagement;
@@ -20,9 +23,6 @@
2023

2124
import javax.annotation.Nonnull;
2225
import javax.annotation.CheckForNull;
23-
import java.util.Collections;
24-
import java.util.List;
25-
import java.util.Set;
2626

2727
import static io.vavr.API.Try;
2828
import static io.vavr.API.unchecked;
@@ -59,9 +59,11 @@ public GeneratedItems[] getTargetComponent(ConfigurationContext context) {
5959
@Override
6060
@SuppressWarnings("unchecked")
6161
public GeneratedItems[] configure(CNode config, ConfigurationContext context) throws ConfiguratorException {
62-
JenkinsJobManagement management = new JenkinsJobManagement(System.out, System.getenv(), null, null, LookupStrategy.JENKINS_ROOT);
62+
Map<String, String> env = new HashMap<>(System.getenv());
63+
JenkinsJobManagement management = new JenkinsJobManagement(System.out, env, null, null, LookupStrategy.JENKINS_ROOT);
6364
Configurator<ScriptSource> configurator = context.lookupOrFail(ScriptSource.class);
6465
return config.asSequence().stream()
66+
.flatMap(source -> processProvidedEnv(source, context, env))
6567
.map(source -> getActualValue(source, context))
6668
.map(source -> getScriptFromSource(source, context, configurator))
6769
.map(script -> generateFromScript(script, management))
@@ -85,6 +87,16 @@ public CNode describe(GeneratedItems[] instance, ConfigurationContext context) t
8587
return null;
8688
}
8789

90+
private Stream<CNode> processProvidedEnv(CNode source, ConfigurationContext context, Map<String, String> env) {
91+
Map.Entry<String, CNode> entry = unchecked(() -> source.asMapping().entrySet().iterator().next()).apply();
92+
if (entry.getKey().equals("providedEnv")) {
93+
unchecked(entry.getValue()::asMapping).apply().entrySet().forEach(envEntry ->
94+
env.put(envEntry.getKey(), revealSourceOrGetValue(envEntry, context)));
95+
return Stream.empty();
96+
}
97+
return Stream.of(source);
98+
}
99+
88100
private CNode getActualValue(CNode config, ConfigurationContext context) {
89101
return unchecked(() -> config.asMapping().entrySet().stream().findFirst()).apply()
90102
.map(entry -> {

job-dsl-plugin/src/test/groovy/javaposse/jobdsl/plugin/ConfigurationAsCodeTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ public class ConfigurationAsCodeTest {
1717
public void configure_seed_job() {
1818
assertNotNull(j.jenkins.getItem("testJob1"));
1919
assertNotNull(j.jenkins.getItem("testJob2"));
20+
assertNotNull(j.jenkins.getItem("testJob3"));
2021
}
2122
}

job-dsl-plugin/src/test/resources/javaposse/jobdsl/plugin/ConfigurationAsCodeTest.yaml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,14 @@ jobs:
1212
}
1313
}
1414
15-
- file: ./src/test/resources/javaposse/jobdsl/plugin/testjob.groovy
15+
- file: ./src/test/resources/javaposse/jobdsl/plugin/testjob.groovy
16+
17+
- providedEnv:
18+
JOB_NAME_FROM_ENV: testJob3
19+
20+
- script: >
21+
job(JOB_NAME_FROM_ENV) {
22+
steps {
23+
shell('echo hello world')
24+
}
25+
}

0 commit comments

Comments
 (0)