FYI I configured CircleCI for this plugin, so now it's possible to download the latest *.hpi *automated* build from there:
i.e. Build #7: https://circleci.com/gh/bsideup/jenkins-pipeline-view/7#artifacts On Tue, Mar 22, 2016 at 8:59 AM Michael Neale <[email protected]> wrote: > In another case it looks like Execution, yes... never mind (should be easy > to fix once identified). I think the jackson stuff just happened to pick > that edge case up (I thought I saw a serialization problem and my brain > suddenly turned off looking for null pointers! hahaha. > > Nice work! > > > On Tuesday, March 22, 2016 at 5:49:49 PM UTC+11, Sergei Egorov wrote: > >> Actually... getStartNode marked with @Nonnull, as well as getExecution(), >> so one of them is null. Execution maybe? >> >> On Tue, Mar 22, 2016 at 8:17 AM Sergei Egorov <[email protected]> wrote: >> > Hi Michael, >>> >>> Wow, interesting finding! >>> >>> I checked with the sources and looks like it's not an issue of the >>> plugin itself, but StepEndNode. Jackson in plugin configured to serialize >>> only pre-configured fields/methods, and any new object in the domain will >>> not affect it. >>> >>> What I see here is that StepEndNode::getTypeDisplayName throws an NPE. >>> From StepEndNode's source code, I see that there are no checks for >>> getStartNode() result, and for some reason it's null. This is a good place >>> to start if you want to figure out what's wrong in your setup (even better >>> if you can put conditional breakpoint on getTypeDisplayName and >>> "getStartNode() == null", because I see (in code) that it might be null, >>> but getTypeDisplayName is not null-safe. >>> >>> On Tue, Mar 22, 2016 at 8:00 AM Michael Neale <[email protected]> >>> wrote: >>> >> As luck would have it, I notice this is tripped by by having global lib >>>> variables added in (basically, DSLs). Is there a JIRA project for this? >>>> >>>> (not a huge thing, I can't imagine many would run into this, but it >>>> looks like it gets upset if not all the things are serializable). >>>> >>>> Caused by: com.fasterxml.jackson.databind.JsonMappingException: (was >>>> java.lang.NullPointerException) (through reference chain: >>>> org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode["typeDisplayName"]) >>>> >>>> at >>>> com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:141) >>>> >>>> at >>>> com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3559) >>>> >>>> at >>>> com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2909) >>>> >>>> at >>>> com.github.bsideup.jenkins.pipeline.ui.view.PipelineViewApi.doNodes(PipelineViewApi.java:75) >>>> >>>> ... 89 more >>>> >>>> Caused by: java.lang.IllegalArgumentException: (was >>>> java.lang.NullPointerException) (through reference chain: >>>> org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode["typeDisplayName"]) >>>> >>>> at >>>> com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3459) >>>> >>>> at >>>> com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3378) >>>> >>>> at >>>> com.github.bsideup.jenkins.pipeline.ui.view.PipelineViewApi$2.apply(PipelineViewApi.java:78) >>>> >>>> at >>>> com.github.bsideup.jenkins.pipeline.ui.view.PipelineViewApi$2.apply(PipelineViewApi.java:75) >>>> >>>> at com.google.common.collect.Iterators$8.next(Iterators.java:812) >>>> >>>> at >>>> com.fasterxml.jackson.databind.ser.std.IterableSerializer.serializeContents(IterableSerializer.java:89) >>>> >>>> at >>>> com.fasterxml.jackson.databind.ser.std.IterableSerializer.serialize(IterableSerializer.java:74) >>>> >>>> at >>>> com.fasterxml.jackson.databind.ser.std.IterableSerializer.serialize(IterableSerializer.java:12) >>>> >>>> at >>>> com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:130) >>>> >>>> ... 92 more >>>> >>>> On Tuesday, March 22, 2016 at 10:49:54 AM UTC+11, Michael Neale wrote: >>>>> >>>>> Very cool, and I like the use of react! >>>>> >>>>> On Monday, March 21, 2016 at 5:52:04 PM UTC+11, Sergei Egorov wrote: >>>>>> >>>>>> Hey everyone, >>>>>> >>>>>> Yesterday I decided to publish sources for my pipeline visualization >>>>>> plugin: https://github.com/bsideup/jenkins-pipeline-view >>>>>> >>>>>> <https://lh3.googleusercontent.com/-t28IjO2m73U/Vu-VVrauoEI/AAAAAAAAAyI/tiF8TH7YVCYiqI4n78DvC0FQ21ir46LNg/s1600/screenshot.png> >>>>>> >>>>>> >>>>>> What's cool about it? >>>>>> First of all, it *can handle any graph* provided by pipeline because >>>>>> it uses very powerful *JS graph library* to position steps. >>>>>> Also, it's a *React* application, written in *ES7* (not even ES6!), >>>>>> with ImmutableJS and RxJS inside - so hipsters will be happy :D But in >>>>>> fact, it means that it's damn easy to develop this plugin and provide >>>>>> more >>>>>> functionality. >>>>>> I use *Webpack* to bundle everything (JS, CSS, fonts, images, SVG >>>>>> icons) in one single pipe.js file. *No Jenkins JS Modules*, no >>>>>> conflicts, no impact on others. Even CSS will not conflict because of >>>>>> *CSS-modules* ( http://glenmaddern.com/articles/css-modules ) >>>>>> All icons are SVG ones and look good on any screen, retina or not, >>>>>> and any zoom level. >>>>>> >>>>>> I use Jackson on the backend side to serialize FlowNodes and their >>>>>> actions. *Why Jackson?* Because it was much easier to implement >>>>>> serialization of selected (non-exposed) fields and class info included >>>>>> compared to Stapler. I saw something were done about classinfo in >>>>>> Stapler, >>>>>> but at the moment of creation of this plugin, it wasn't delivered to >>>>>> Jenkins core yet. Also, *almost none of the Pipeline actions are >>>>>> @Expose-d*. >>>>>> >>>>>> I use *gradle-jpi-plugin* instead of Maven because it's much easier >>>>>> to describe some complex build process with Gradle, especially when >>>>>> frontend build is involved. In fact, it's just one line: >>>>>> >>>>>> https://github.com/bsideup/jenkins-pipeline-view/blob/954b895b6574cdf34815ff94a4a8db3ad3811aeb/build.gradle#L61 >>>>>> >>>>>> >>>>>> Future development >>>>>> Will I continue to develop it? Definitely! Here, *at ZeroTurnaround*, >>>>>> we use Jenkins a lot, and eventually we will migrate to the pipelines, >>>>>> and >>>>>> proper visualization of the process is a must for us. And feel free to >>>>>> contribute as well, it's really a good chance to learn *modern JS >>>>>> stack* as well :) >>>>>> >>>>>> >>>>>> >>>>>> Best regards, >>>>>> Sergei Egorov >>>>>> >>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Jenkins Developers" 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-dev/0697c884-91ad-4716-809e-3c40cf5e35da%40googlegroups.com >>>> <https://groups.google.com/d/msgid/jenkinsci-dev/0697c884-91ad-4716-809e-3c40cf5e35da%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> -- > You received this message because you are subscribed to the Google Groups > "Jenkins Developers" 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-dev/70fea7d1-fb89-4500-802b-9e7ec2cb3fb1%40googlegroups.com > <https://groups.google.com/d/msgid/jenkinsci-dev/70fea7d1-fb89-4500-802b-9e7ec2cb3fb1%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Jenkins Developers" 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-dev/CAAJdKXkBYD5eHF7QADriquFjtZYBnh8h8Rz0Nc5yQA5jgCNHoA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
