-
Bug
-
Resolution: Unresolved
-
Minor
-
Jenkins 2.153, Pipeline 2.6
I'm trying to write a common library building Docker images from Dockerfile. I wrote a reusable global pipeline, where I'm iterating over Dockerfile lines. I tried to use Java 8 Streams, however I ended up with issue potentially related to JENKINS-26307 and JENKINS-42769, which is not related not to Groovy functional features, but Java 8 feature.
An example code used:
def getMissingLabels(Map<String, String> labels) { ['label1', 'label2', 'label3', 'label4'].stream() .filter({ label -> !isLabelDefined(label, labels) }) .collect(Collectors.toList()) }
Whole stream execution results in "false" boolean result, instead of a list. Even complex streams are passing through, but evaluates to "false". When using more complex stream like:
Arrays.stream(splitted) .filter { it.startsWith('LABEL') } .map { it.replaceAll('(LABEL)|"', '') } .map { it.trim() } .map { it.split('=', 2) } .collect(Collectors.toMap( { val -> val[0].toLowerCase() }, { val -> val[1] }))
it enters only first filter expression and does not evaluate the rest.
When replaced functional style code with typical imperative style (for loop) it works.
- relates to
-
JENKINS-26481 Mishandling of binary methods accepting Closure
- Resolved