Extract this in a shell script or so. Use Jenkins pipeline for orchestration, not for programming.
It sounds tempting to use pipeline like it's Groovy. But first it's not *really* Groovy as you've discovered and second it'll make it very hard to develop locally if the build process steps are only runnable within Jenkins. Cheers -- Baptiste Le sam. 18 juil. 2020 à 21:07, Gianluca <[email protected]> a écrit : > I use a different approach ... but it may not fits your use case. > In any case, usually when I have to perform operation on each element of a > Map, I end up on transform the Map on steps that I can feed to parallel > > steps { > stepsMap = [:] > > stepsMap = dataMap.collectEntries{[ > "Name of step to perfom (that will appear on BlueOcean": { > // pipeline code, I usually use script block here to be able to do > stuff not available in declarative > } > ]} > > parallel stepsMap > > } > > > By default collectEntries put the value into a variable called $it ... but > the there is a syntax that allow to use key and value variables and use > them inside. > > > > > On Saturday, 18 July 2020 19:28:32 UTC+1, David Karr wrote: >> >> I'm posting this mostly so people can find it. Perhaps it's already >> well-known, and perhaps I'm missing some simple thing that makes this >> easier to do, but I think not. >> >> In my Jenkinsfile, I need to iterate over a map created with Groovy, >> calling "writeFile" with the key as the file name, and the value as the >> contents. If you haven't had to do this, you might assume this is simple. >> If you have, you either discovered what I did, or you gave up. >> >> What I tried to write first was this: >> dataMap.each { >> writeFile(file: "target/generated." + key, text: value) >> } >> >> This gets serialization errors. I then discovered that calling pipeline >> steps within closures would not work, so I changed it to a plainer >> iteration: >> >> for(Map.Entry entry : dataMap) { >> writeFile(file: "target/generated." + entry.getKey(), text: entry. >> getValue()) >> } >> >> This also does not work. It appears that you simply can't call a pipeline >> step with a map anywhere in scope. >> >> What DOES work is something like the following: >> def keyValueList = [] >> for (Map.Entry entry : dataMap) { >> keyValueList.add(entry.getKey()) >> keyValueList.add(entry.getValue()) >> } >> dataMap = null >> for (int ctr = 0; ctr < keyValueList.size(); ctr += 2) { >> writeFile(file: "target/generated." + keyValueList.get(ctr), text: >> keyValueList.get(ctr + 1)) >> } >> keyValueList = null >> >> Suggestions would be useful, or perhaps other people will just do the >> same thing I've done. >> > -- > You received this message because you are subscribed to the Google Groups > "Jenkins Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jenkinsci-users/569ba94d-b5e6-4956-ac7d-cd2e3bf4b692o%40googlegroups.com > <https://groups.google.com/d/msgid/jenkinsci-users/569ba94d-b5e6-4956-ac7d-cd2e3bf4b692o%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "Jenkins Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CANWgJS7GD4ixsERgnEzdVbeM61dihexe06SzPCZMh96Fdg_m-Q%40mail.gmail.com.
