Builds are failing in CCV2 because of changes in the builder logic
--
From yesterday(15.09.2022) our builds in CCv2 are failing because of recent changes from SAP in the builder logic. Error:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.lang.CharSequence.toString()" because "charSequence" is null
at com.google.common.hash.AbstractHasher.putString(AbstractHasher.java:55)
at com.google.common.hash.AbstractHashFunction.hashString(AbstractHashFunction.java:44)
at de.hybris.ccv2.image.hash.generator.HashGeneratorUtils.getHashForString(HashGeneratorUtils.java:46)
at de.hybris.ccv2.image.hash.generator.DockerImageHashGenerator.getBaseImageHash(DockerImageHashGenerator.java:45)
at de.hybris.ccv2.image.hash.generator.JsAppsImagesHashGenerator.putImageSpecificHashData(JsAppsImagesHashGenerator.java:49)
at de.hybris.ccv2.image.hash.generator.DockerImageHashGenerator.generateHash(DockerImageHashGenerator.java:38)
at de.hybris.ccv2.image.ProjectDockerImage.generateHashCode(ProjectDockerImage.java:143)
at de.hybris.ccv2.image.ProjectDockerImage.getHash(ProjectDockerImage.java:48)
at de.hybris.ccv2.image.ProjectDockerImage.isAvailableInTargetRegistry(ProjectDockerImage.java:64)
at de.hybris.ccv2.task.EvaluateServicesAndImagesTask.printImagesInfo(EvaluateServicesAndImagesTask.java:50)
at de.hybris.ccv2.task.EvaluateServicesAndImagesTask.process(EvaluateServicesAndImagesTask.java:37)
at de.hybris.ccv2.Builder.runTask(Builder.java:255)
at de.hybris.ccv2.Builder.lambda$runTasks$5(Builder.java:222)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
at de.hybris.ccv2.Builder.runTasks(Builder.java:217)
at de.hybris.ccv2.Builder.run(Builder.java:99)
at de.hybris.ccv2.Builder.main(Builder.java:55)
One possible workaround for the Storefronts which are based on Spartacus from SAP is:
To enable SSR as described on: https://help.sap.com/docs/SAP_COMMERCE_CLOUD_PUBLIC_CLOUD/b2f400d4c0414461a4bb7e115dccd779/cd5b94c25a68456ba5840f942f33f68b.html?locale=en-US
Enabling SSR can affect the running system, so it’s not a quick change, it requires testing on lower environments, too.
As our storefront is based on React.js this workaround was not applicable for us. So, there is a second workaround:
Disabling hashing mechanism used by CCv2 to speed up build process.
Adding in js-storefront manifest.json:
{ "disableImageReuse": true, "applications": [ { "name": "app", "path": "app" } ]}
Builds can take longer after this change, because the image is always generated, even if exactly the same image was generated formerly.
I hope this will help others who face the same build issues.