Including other widgets into your plugin view

26 views
Skip to first unread message

gamble....@gmail.com

unread,
Feb 23, 2016, 4:14:01 AM2/23/16
to Jenkins Developers

I've been investigating how to include the build history widget on an Action extension plugin.

 

We are currently using stapler via a groovy context to render some information pertaining to a particular run, as well as get the build history in the side panel - code below.

 

def st = namespace("jelly:stapler")

st
.include(it: my.run, page: "sidepanel")

l
.side_panel {

    st
.include(it:my.proj, page:"/hudson/widgets/HistoryWidget/all")
}

l
.main_panel {
   
//Rendering other components
}


Including the historyWidget/all has some undesirable effects - see attached '1'




It seems to include the entire page, plus the widget in the plugin's view.

 

If I try to use the default widget (not all of the entries), I see a much different error - see attached, callstack below. I suspect I may be hitting this issue as I am not providing a relative context for the include call (perhaps I need to add the 'from' parameter, but I'm not quite sure what value I'd pass through).

 

java.lang.RuntimeException: org.apache.commons.jelly.JellyTagException: jar:file:/C:/Users/jgamble/Perforce/JenkinsDev/JenkinsDev/Plugins/job-summary-plugin/dev/target/work/webapp/WEB-INF/lib/jenkins-core-1.625.2.jar!/lib/layout/layout.jelly:247:25: <d:invokeBody> org.apache.commons.jelly.JellyTagException: jar:file:/C:/Users/jgamble/Perforce/JenkinsDev/JenkinsDev/Plugins/job-summary-plugin/dev/target/work/webapp/WEB-INF/lib/jenkins-core-1.625.2.jar!/lib/layout/main-panel.jelly:36:21: <d:invokeBody> org.apache.commons.jelly.JellyTagException: jar:file:/C:/Users/jgamble/Perforce/JenkinsDev/JenkinsDev/Plugins/job-summary-plugin/dev/target/work/webapp/WEB-INF/lib/jenkins-core-1.625.2.jar!/hudson/widgets/HistoryWidget/index.jelly:57:40: <st:include> No page found 'entries.jelly' for class hudson.model.FreeStyleProject

at org.kohsuke.stapler.jelly.groovy.JellyBuilder.doInvokeMethod(JellyBuilder.java:280)

at org.kohsuke.stapler.jelly.groovy.Namespace$ProxyImpl.invoke(Namespace.java:92)

at com.sun.proxy.$Proxy56.layout(Unknown Source)

at lib.LayoutTagLib$layout.call(Unknown Source)

at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)

at index.run(index.groovy:11)

at org.kohsuke.stapler.jelly.groovy.GroovierJellyScript.run(GroovierJellyScript.java:74)

at org.kohsuke.stapler.jelly.groovy.GroovierJellyScript.run(GroovierJellyScript.java:62)

at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63)

at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53)

at org.kohsuke.stapler.jelly.JellyRequestDispatcher.forward(JellyRequestDispatcher.java:55)

at org.kohsuke.stapler.jelly.groovy.GroovyFacet.handleIndexRequest(GroovyFacet.java:121)

at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:735)

at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)

at org.kohsuke.stapler.MetaClass$13.dispatch(MetaClass.java:411)

at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)

at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)

at org.kohsuke.stapler.MetaClass$13.dispatch(MetaClass.java:411)

at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)

at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)

at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249)

at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)

at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)

at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)

at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)

at org.kohsuke.stapler.Stapler.service(Stapler.java:238)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)

at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:491)

 

So my question: How can I simply include the Build History widget via stapler/jelly into my plugin's view? 

 

Thanks!

 

Robert Sandell

unread,
Feb 23, 2016, 6:34:50 AM2/23/16
to jenkin...@googlegroups.com
Well first your code suggests that you are adding two side panels, first the build's side panel and then your own that contains something strange.

For including the widget I would look at how it's included in the existing side panel today and try to do something similar:
https://github.com/jenkinsci/jenkins/blob/master/core/src/main/resources/hudson/model/AbstractProject/sidepanel.jelly#L62

e.g.

l.side_panel {

    st
.include(it:my.historyWidget, page:"index.jelly")
}


--
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 jenkinsci-de...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-dev/bc144b15-2173-4d1a-b642-1fe0e738a470%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Robert Sandell
Software Engineer
CloudBees Inc.

gamble....@gmail.com

unread,
Feb 23, 2016, 7:01:37 AM2/23/16
to Jenkins Developers
Thanks Robert - a quick and awesome solution.

Sorry if the question was a bit silly - first plugin syndrome over here!
Reply all
Reply to author
Forward
0 new messages