Skip to content

Commit 64bf603

Browse files
committed
Merge remote-tracking branch 'rudolfwalter/casc-env'
2 parents 8d3bfc1 + 202234c commit 64bf603

File tree

5 files changed

+51
-8
lines changed

5 files changed

+51
-8
lines changed

docs/Home.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@ Browse the Jenkins issue tracker to see any [open issues](https://issues.jenkins
3333

3434
## Release Notes
3535
* 1.76 (unreleased)
36-
* added documentation for pitfalls when using multiple Job DSL build steps in a single job
36+
* Added documentation for pitfalls when using multiple Job DSL build steps in a single job
3737
([JENKINS-44142](https://issues.jenkins-ci.org/browse/JENKINS-44142))
38+
* Pass environment from CasC file to Job DSL script
39+
([JENKINS-59037](https://issues.jenkins-ci.org/browse/JENKINS-59037))
3840
* Fixed [[Dynamic DSL]] problem
3941
([JENKINS-57817](https://issues.jenkins-ci.org/browse/JENKINS-57817))
4042
* Show items with same display name on job and build pages

docs/JCasC.md

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Via [configuration-as-code-plugin](https://plugins.jenkins.io/configuration-as-code) also known as JCasC
1+
~~~~Via [configuration-as-code-plugin](https://plugins.jenkins.io/configuration-as-code) also known as JCasC
22
33
It is possible to configure initial seed jobs through a yaml config file.
44
The basics for job dsl is you have a root element called `jobs` that will be parsed to configure via job dsl
@@ -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: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,28 @@
33
import hudson.Extension;
44
import io.jenkins.plugins.casc.Attribute;
55
import io.jenkins.plugins.casc.ConfigurationContext;
6-
import io.jenkins.plugins.casc.ConfiguratorException;
76
import io.jenkins.plugins.casc.Configurator;
7+
import io.jenkins.plugins.casc.ConfiguratorException;
88
import io.jenkins.plugins.casc.RootElementConfigurator;
99
import io.jenkins.plugins.casc.SecretSourceResolver;
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;
1413
import javaposse.jobdsl.dsl.GeneratedItems;
1514
import javaposse.jobdsl.plugin.JenkinsDslScriptLoader;
1615
import javaposse.jobdsl.plugin.JenkinsJobManagement;
1716
import javaposse.jobdsl.plugin.LookupStrategy;
1817
import org.kohsuke.accmod.Restricted;
1918
import org.kohsuke.accmod.restrictions.NoExternalUse;
2019

21-
import javax.annotation.Nonnull;
2220
import javax.annotation.CheckForNull;
21+
import javax.annotation.Nonnull;
2322
import java.util.Collections;
23+
import java.util.HashMap;
2424
import java.util.List;
25+
import java.util.Map;
2526
import java.util.Set;
27+
import java.util.stream.Stream;
2628

2729
import static io.vavr.API.Try;
2830
import static io.vavr.API.unchecked;
@@ -59,9 +61,11 @@ public GeneratedItems[] getTargetComponent(ConfigurationContext context) {
5961
@Override
6062
@SuppressWarnings("unchecked")
6163
public GeneratedItems[] configure(CNode config, ConfigurationContext context) throws ConfiguratorException {
62-
JenkinsJobManagement management = new JenkinsJobManagement(System.out, System.getenv(), null, null, LookupStrategy.JENKINS_ROOT);
64+
Map<String, String> env = new HashMap<>(System.getenv());
65+
JenkinsJobManagement management = new JenkinsJobManagement(System.out, env, null, null, LookupStrategy.JENKINS_ROOT);
6366
Configurator<ScriptSource> configurator = context.lookupOrFail(ScriptSource.class);
6467
return config.asSequence().stream()
68+
.flatMap(source -> processProvidedEnv(source, context, env))
6569
.map(source -> getActualValue(source, context))
6670
.map(source -> getScriptFromSource(source, context, configurator))
6771
.map(script -> generateFromScript(script, management))
@@ -85,6 +89,16 @@ public CNode describe(GeneratedItems[] instance, ConfigurationContext context) t
8589
return null;
8690
}
8791

92+
private Stream<CNode> processProvidedEnv(CNode source, ConfigurationContext context, Map<String, String> env) {
93+
Map.Entry<String, CNode> entry = unchecked(() -> source.asMapping().entrySet().iterator().next()).apply();
94+
if (entry.getKey().equals("providedEnv")) {
95+
unchecked(entry.getValue()::asMapping).apply().entrySet().forEach(envEntry ->
96+
env.put(envEntry.getKey(), revealSourceOrGetValue(envEntry, context)));
97+
return Stream.empty();
98+
}
99+
return Stream.of(source);
100+
}
101+
88102
private CNode getActualValue(CNode config, ConfigurationContext context) {
89103
return unchecked(() -> config.asMapping().entrySet().stream().findFirst()).apply()
90104
.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)