Your browser was unable to load all of the resources. They may have been blocked by your firewall, proxy or browser configuration.
Press Ctrl+F5 or Ctrl+Shift+R to have your browser try again.

QB 2.0 Feedback #495

mattinger ·
I have some feedback on using QB 2.0. I've been playing around with it for a very short time, but here's what i've noticed:

1. The variables is located on the "Advanced" tab. This doesn't seem to make much sense to me. Perhaps it's the way our builds are setup, but
we use variables for things like indicating the svn branch, version number (the product version, not build version), ant home, java home, etc...

Having variables on the basic settings page allows one to copy a configuration, and modify the variables at the same time to create a build
for a new version.

It will now take many more clicks to do this. Any chance this can move to basic settings tab?

I also liked the free form nature of entering the variables in 1.2.x, but I can see why that was changed.

2. Is the build indicator (ie, the gears if it's running) shown in the "Latest Build" column?

3. There seems to be no way to see the child configurations unless you go back to the main "Configurations" tab. The "Child Configurations" tab
is no longer present.

4. Non-Recursive SVN export/checkout seems to be missing.

I'll probably have some more feedback as I get further along.

I guess my basic worries are that I'm losing functionality with this upgrade, and some things are getting harder to do.
robinshen ADMIN ·
1. Variables will be moved back to basic setting as suggested. It is now not taking a free form input since we need to support the prompt setting option which is long requested by many customers. So this is a trade-off.
2. The build indicator should still be there although the gear icon has been changed to use a different spinning icon together with a progress bar. Please elaborate on this if you observed different behavior.
3. We removed child configurations tab since this tab is mainly designed to allow user to add/remove child configurations, and this caused a lot of confusion to new users as they do not know where to add/remove configurations unless we told them to switch to children tab of the parent configuration. And now we moved all edit actions to dashboard and expect these functionalities to be a little easier to locate. We can of course add back this tab if you have other good reasons.
4. This is a missed feature and we will get it added in next beta or 2.0 GA.

Thanks a lot for your feedback.
Robin
ALG4 ·
It looks like the "Statistics" page doesn't seem to work in the beta1. When I go to it, I just get:

"HTTP ERROR: 500

Internal Server Error

RequestURI=/stats/5/

Powered by Jetty://"

Thanks
robinshen ADMIN ·
Please check the server url setting at "administration / system setting" screen. The server url should be specified correctly to point to current server. If this still does not work, please check if there are any errors printed out in the system log.

Thanks
Robin
ALG4 ·
The URL setting was correct, but the system log had this error:

2009-05-26 16:27:24,2 [SocketListener0-13] WARN org.mortbay.jetty.servlet.ServletHandler - Error for /stats/5/
java.lang.NoClassDefFoundError
at com.pmease.quickbuild.web.chart.LineChart.getChart(LineChart.java:172)
at com.pmease.quickbuild.plugin.report.engine.renderer.statistics.DefaultStatisticsPanel$1.load(DefaultStatisticsPanel.java:44)
at org.apache.wicket.model.LoadableDetachableModel.getObject(LoadableDetachableModel.java:114)
at org.apache.wicket.Component.getModelObject(Component.java:1558)
at com.pmease.quickbuild.web.chart.JFreeChartPanel.getChart(JFreeChartPanel.java:118)
at com.pmease.quickbuild.web.chart.JFreeChartPanel.onBeforeRender(JFreeChartPanel.java:50)
at org.apache.wicket.Component.internalBeforeRender(Component.java:1002)
at org.apache.wicket.Component.beforeRender(Component.java:1034)
at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1589)
at org.apache.wicket.Component.onBeforeRender(Component.java:3682)
at org.apache.wicket.Component.internalBeforeRender(Component.java:1002)
at org.apache.wicket.Component.beforeRender(Component.java:1034)
at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1589)
at org.apache.wicket.Component.onBeforeRender(Component.java:3682)
at org.apache.wicket.Component.internalBeforeRender(Component.java:1002)
at org.apache.wicket.Component.beforeRender(Component.java:1034)
at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1589)
at org.apache.wicket.Component.onBeforeRender(Component.java:3682)
at org.apache.wicket.Component.internalBeforeRender(Component.java:1002)
at org.apache.wicket.Component.beforeRender(Component.java:1034)
at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1589)
at org.apache.wicket.Component.onBeforeRender(Component.java:3682)
at com.pmease.quickbuild.web.component.tabbedpanel.TabbedPanel.onBeforeRender(TabbedPanel.java:96)
at org.apache.wicket.Component.internalBeforeRender(Component.java:1002)
at org.apache.wicket.Component.beforeRender(Component.java:1034)
at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1589)
at org.apache.wicket.Component.onBeforeRender(Component.java:3682)
at org.apache.wicket.Page.onBeforeRender(Page.java:1426)
at com.pmease.quickbuild.web.page.MainPage.onBeforeRender(MainPage.java:527)
at org.apache.wicket.Component.internalBeforeRender(Component.java:1002)
at org.apache.wicket.Component.beforeRender(Component.java:1034)
at org.apache.wicket.Component.prepareForRender(Component.java:2160)
at org.apache.wicket.Page.renderPage(Page.java:883)
at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:231)
at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:104)
at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1181)
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1252)
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1353)
at org.apache.wicket.RequestCycle.request(RequestCycle.java:493)
at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:355)
at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:124)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:596)
at com.pmease.quickbuild.web.UIServlet.service(UIServlet.java:53)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at org.eclipse.equinox.http.servlet.internal.ServletRegistration.handleRequest(ServletRegistration.java:90)
at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:111)
at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:269)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428)
at org.mortbay.jetty.servlet.ServletHandler.dispatch(ServletHandler.java:677)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
at org.mortbay.http.HttpServer.service(HttpServer.java:909)
at org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
at org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
robinshen ADMIN ·
It is odd. What is the platform and JDK?
ALG4 ·
It is on Red Hat Enterprise Linux 4, with jdk 1.50_17.
robinshen ADMIN ·
I tested using JDK5 and Fedora and statistics can be loaded correctly. Do you mind doing the following to track down the problem?
1. open the file "misc/release" with text editor, and make sure the first line is of "#Mon May 18 07:21:18 MST 2009". If not, please re-download the beta1 since we've made some minor fixes at May 18.
2. extract the downloaded file into a clean directory.
3. bring up the server by running "bin/server.sh console".
4. set up a dummy step for the root configuration.
5. run the root configuration.
6. after the build finishes, check if statistics can be displayed.

Thanks
Robin
ALG4 ·
Yes, it's the same build date. I'll try re-installing and see if that helps. I did notice that this only occurs if there are builds in the history. In a config without any builds in the history, it switches to the statistics page, but there are no statistics (as expected). But it doesn't have the 500 error.

Also, I have another issue I'm running into. I have a shell script which runs the unzip command, however it hangs everytime when run through QB. This does not happen outside of QB, or with QB1. I don't see any unusual things in the logs, so I'm not positive it is a QB issue, but since it works outside of QB it could be.

Thanks
ALG4 ·
The re-install seemed to do the trick; both these problems are now fixed.
ALG4 ·
I have a few more suggestions for v2:

[list=1]
Log of canceled builds
I noticed that if a build is canceled, the details of the log are not available, as they are in QB1. This helps if we know something failed, so we don't want to wait for an entire build to complete (such as with parallel steps), but still want to see the details of the failure in the log.
[/*:m]
Support for QNX Neutrino
We have to build across many platforms/architectures, which include all the platforms QB2 supports. The one additional we need that isn't supported is QNX Neutrino, which would help complete our build system. With QB1, we use ssh to build on unsupported platforms, but would like to completely switch to using QB entirely with QB2.
[/*:m]
[*]Have an option to name directories by config name instead of ID, like in QB1
Occasionally, we need to manually go into the workspace directories, and it is difficult to navigate by ID.[/*:m][/list:o]

Also, a question. There is a build for Linux Itanium 64, however, QB2 also requires JDK 1.5. But as far as I can tell, JDK for Linux Itanium was discontinued by Sun after 1.4.2. Is it possible to run the agent with 1.4.2? Or do you know of a version of 1.5 somewhere?

So far QB2 looks pretty good, and will help solve many of our issues, especially with scalability.

Thanks!
robinshen ADMIN ·
Please see my reply per your question below:

1. Allow grouping/sorting of steps
Please submit a feature request in our JIRA for this.
2. Log of canceled build
Will generate the log in 2.0 GA even for cancelled builds.
3. Parallel builds
When build is running, there is a live log tab which will be ajax-auto-refreshed to display latest log entries of running steps. However for parallel steps, log entries from different steps may interlace. Do you mean each step in the parallel composition should get a separate live log view so that log entries are not interlaced?
In future version, we will enhance step view to display more information just as you suggested, and statistics will be enhanced to display metrics of steps also.
4. Support for QNX Neutrino
I am afraid we can not support this in the near future since QuickBuild relies on a third party product (Java Service Wrapper) to run on multiple platforms which does not have any clue on supporting this platform.
5. Have an option to name directories by config name instead of ID, like in QB1
In the coming beta2, workspaces will be named by configuration name and organized hierarchically by default.
6. Support for Linux Itanium 64
JDK1.5 is a pre-requisite and sorry I do not know if there is JDK5 for Linux IA64. The list of platforms we've internally tested are Solaris X86-32, Windows x86-32, Windows x86-64, Linux x86-32, and MacOSX-32. Other platforms are listed since Java service wrapper supports them and we believe QuickBuild should work on those platforms as long as JDK5 is available. We will try to use retrotranslator (a JDK1.4 backport tool) to see if QuickBuild can be back-ported to JDK1.4. If unfortunately we failed to do the backport, we will at least make QuickBuild 1.x (which is able to run on JDK1.4) compatible with QuickBuild 2 so that they can interact through QuickBuild repository.

Thanks a lot for your feedbacks and suggestions.
Robin
ALG4 ·
For the log views, I did mean splitting up the live log view for parallel builds. However, I was thinking that it could go on the Overview page when the build is running and steps are shown, similar to the Step view after the build is done, and individual logs are available for each step.
robinshen ADMIN ·
Thanks for the clarification. Have added this to our task list. A new feature request has been created for this as:

http://jira.pmease.com/browse/QB-419

Regards
Robin
sten ·
I can't see how to setup ClearCase proof builds with QB 2.0 beta 2, the documentation only covers Subversion. I need to know which attributes to set below My Agent.
robinshen ADMIN ·
I am sorry that documentation is not complete at this time, and we will get it ready when 2.0 is GA. For ClearCase specific proof build setup, I've just written a section as:

http://wiki.pmease.com/display/qb2/5.2+ ... +ClearCase

Please let me know if you have any question following this guide.

Thanks
Robin
sten ·
Thank, Robin. Much clearer now <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->

One more question: if I want a proof build to be run by the agent of the client initiating the proof build, is this possible? node.isAgent() finds any agent, but since the proof build magically finds and transfers changes in the workspace of the client, it would be really nice if it was possible to match the agent on the client's machine. I can only find how to get the user but not the host <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->
ALG4 ·
Could you add one for Accurev as well?

Thanks!
u1j201 ·
I'm sorry if this question has been asked before, but the migration from our 1.2.10 version to 2.0 failed due to the variables i use to designate the artifacts directory. I personally could care less about any of the previous builds, but i don't really want to recreate all of the configurations. Is there anyway to bypass all previous history and just copy in the configurations
robinshen ADMIN ·
[quote="ALG4"]Could you add one for Accurev as well?

Thanks![/quote]

Unfortunately Accurev is the only SCM we can not work out proof build support since its command line tool does not currently provide necessary information to accurately collect uncommitted files from a user's workspace.

Regards
Robin
robinshen ADMIN ·
[quote="u1j201"]I'm sorry if this question has been asked before, but the migration from our 1.2.10 version to 2.0 failed due to the variables i use to designate the artifacts directory. I personally could care less about any of the previous builds, but i don't really want to recreate all of the configurations. Is there anyway to bypass all previous history and just copy in the configurations[/quote]

As the message of the migrate command suggests, you may remove the variables from artifacts directory property in 1.0 and re-export the database. As long as no variables are used in the artifacts property, the migration should be done successfully.

Regards
Robin
robinshen ADMIN ·
[quote="sten"]Thank, Robin. Much clearer now <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->

One more question: if I want a proof build to be run by the agent of the client initiating the proof build, is this possible? node.isAgent() finds any agent, but since the proof build magically finds and transfers changes in the workspace of the client, it would be really nice if it was possible to match the agent on the client's machine. I can only find how to get the user but not the host <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->[/quote]

Currently the user agent node is only used to collect/commit uncommitted changes on user's desktop in a proof build process, and can not be used for other purposes. Can I ask why you want to run proof build on the client machine initiating the build? The proof build is designed to send user's local changes to build grid to make use of server/grid resources.

Thanks
Robin
sten ·
[quote="robinshine"][quote="sten"]One more question: if I want a proof build to be run by the agent of the client initiating the proof build, is this possible? node.isAgent() finds any agent, but since the proof build magically finds and transfers changes in the workspace of the client, it would be really nice if it was possible to match the agent on the client's machine. I can only find how to get the user but not the host <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->[/quote]

Currently the user agent node is only used to collect/commit uncommitted changes on user's desktop in a proof build process, and can not be used for other purposes. Can I ask why you want to run proof build on the client machine initiating the build? The proof build is designed to send user's local changes to build grid to make use of server/grid resources.

Thanks
Robin[/quote]

Our server build grid wouldn't currently hold up for a massive amount of proof builds, so running the proof build on the client would be a convenient way for a developer to run the complete build/unit tests in a clean workspace with a minimum setup time. Of course, the developer has to have a proper build agent installed. So the request was only to have an option to find out the client host initiating the proof build. Our main purpose for running proof builds is otherwise to let the Windows developers easily build on other platforms like Solaris and Linux (using the build grid).
robinshen ADMIN ·
[quote="sten"][quote="robinshine"][quote="sten"]One more question: if I want a proof build to be run by the agent of the client initiating the proof build, is this possible? node.isAgent() finds any agent, but since the proof build magically finds and transfers changes in the workspace of the client, it would be really nice if it was possible to match the agent on the client's machine. I can only find how to get the user but not the host <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->[/quote]

Currently the user agent node is only used to collect/commit uncommitted changes on user's desktop in a proof build process, and can not be used for other purposes. Can I ask why you want to run proof build on the client machine initiating the build? The proof build is designed to send user's local changes to build grid to make use of server/grid resources.

Thanks
Robin[/quote]

Our server build grid wouldn't currently hold up for a massive amount of proof builds, so running the proof build on the client would be a convenient way for a developer to run the complete build/unit tests in a clean workspace with a minimum setup time. Of course, the developer has to have a proper build agent installed. So the request was only to have an option to find out the client host initiating the proof build. Our main purpose for running proof builds is otherwise to let the Windows developers easily build on other platforms like Solaris and Linux (using the build grid).[/quote]

This makes sense. We will try to make it possible in beta3.

Thanks
Robin
kchristenson ·
I just started working with QB 2.0 and I can't find the JavaDoc or documentation.
I would like to now how to find the current workspace or the properties of the current node.
Examples of what can be used in the Pre/Post scripts would be appreciated.
robinshen ADMIN ·
The JavaDoc will be displayed if you click the "more" link appeared in the property help window. For example, when you edit the step pre script property, just hover the mouse over the help icon of the property and a window explaining the property will be displayed with a scriptable indicator. Clicking the "more" link at right side of the indicator will display the embedded javadoc for QuickBuild objects including node, and configuration. And the getWorkspaceDir() method is defined in the configuration object.
kchristenson ·
I would like to be able to disable a step rather than delete it completely. I'm working on a configuration the pulls files from a variety of repositories before it builds. I would like to be able to disable the long running checkout steps the I know work in order to troubleshoot the other steps without waiting a long time.
scastria ·
I can think of two choices:

1. Add a variable to your execute condition like:

(current.parent==null || !(current.parent.anyChildFailed)) && !(vars.get("skipStep").getBooleanValue())

so that by changing the value of skipStep you can control whether that step executes or not.

2. Do not clean out your workspace after a build so that the next time the long repository checkout step executes, it just performs an update instead of a full checkout. This is the option that I have implemented with Subversion and it has improved my 5 hour builds to 3 hours.
robinshen ADMIN ·
You may even make the variable "skipStep" prompting so that you can choose whether or not to skip that step when manually triggers the build without editing the configuration basic settings.
tonymatell ·
[quote="robinshine"]I am sorry that documentation is not complete at this time, and we will get it ready when 2.0 is GA. For ClearCase specific proof build setup, I've just written a section as:

http://wiki.pmease.com/display/qb2/5.2+ ... +ClearCase

Please let me know if you have any question following this guide.

Thanks
Robin[/quote]

Thanks for the link Robin very helpful to me.



______________________________________________

Tony Matell
Babyphon