At the FOSDEM Developer Meetup, I suggested that building a better UI on top of
Jenkins would likely be easiest by ripping the UI out of the Java layer and
going the more common API + JavaScript application approach which is commonly
used for web applications today.


I spent some time experimenting with this while traveling across Europe and
here are the biggest issues I've identified:

  * The Jenkins remote API is CRAZY (not good). The data you will find on the
    /api version of a URL often times doesn't
    map ot what you see on the page.

    Take the "home page" for example, whose API response has:
      * Some information about executors on the master, but nothing on the
        slaves
      * Contains information about slave ports?
      * Lists jobss that, if you have a different default view, are not the
        same as the default view (not sure if this is good or bad)

    There isn't a clear "object model" being exposed for jobs, depending on
    your depth, you might get a lot more information which /seems/ relatively
    haphazardly put together, instead of exposing a logical Job object over the
    API

  * To work effectively, an alternate API would *have* to run as a plugin, to
    run on the same domain to avoid needing to use the JSONP API which would
    make write operations difficult. This would make (IMHO) things a bit tricky
    for distribution/updates of the UI App.

  * Exposing plugin views is going to be a scary/difficult. Right now you have
    Jelly/Groovy views that get smattered onto the page, and in many cases can
    and *will* break the page (configuration pages, lookin' at you). I'm
    looking at other examples of "JS SDKs" (e.g. <https://teambox.com/api2>)
    for inspiration on how to make JS views/functionality more pluggable, while
    maintaining some semblance of safety, to protect the page from bad code
    injected by plugins


My current mode of thinking (and why I asked about Groovy plugins before) is
that what is needed is a plugin that provides a more suitable API for the task
at hand, but also can bundle up the UI App and serve it off of Jenkins itself.


Time permitting I'll be exploring that a bit more, I just wanted to let
everybody know where my head was at after some experimentation.


Cheers
- R. Tyler Croy
--------------------------------------
    Code: https://github.com/rtyler
 Chatter: https://twitter.com/agentdero

Attachment: signature.asc
Description: Digital signature

Reply via email to