33import hudson .Extension ;
44import io .jenkins .plugins .casc .Attribute ;
55import io .jenkins .plugins .casc .ConfigurationContext ;
6- import io .jenkins .plugins .casc .ConfiguratorException ;
76import io .jenkins .plugins .casc .Configurator ;
7+ import io .jenkins .plugins .casc .ConfiguratorException ;
88import io .jenkins .plugins .casc .RootElementConfigurator ;
99import io .jenkins .plugins .casc .SecretSourceResolver ;
1010import io .jenkins .plugins .casc .impl .attributes .MultivaluedAttribute ;
1111import io .jenkins .plugins .casc .model .CNode ;
1212import io .jenkins .plugins .casc .model .Mapping ;
13- import java .util .Map ;
1413import javaposse .jobdsl .dsl .GeneratedItems ;
1514import javaposse .jobdsl .plugin .JenkinsDslScriptLoader ;
1615import javaposse .jobdsl .plugin .JenkinsJobManagement ;
1716import javaposse .jobdsl .plugin .LookupStrategy ;
1817import org .kohsuke .accmod .Restricted ;
1918import org .kohsuke .accmod .restrictions .NoExternalUse ;
2019
21- import javax .annotation .Nonnull ;
2220import javax .annotation .CheckForNull ;
21+ import javax .annotation .Nonnull ;
2322import java .util .Collections ;
23+ import java .util .HashMap ;
2424import java .util .List ;
25+ import java .util .Map ;
2526import java .util .Set ;
27+ import java .util .stream .Stream ;
2628
2729import static io .vavr .API .Try ;
2830import 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 -> {
0 commit comments