Please help with choosing CI build tool - java

I need to choose the right CI build tool which will:
Support groups of build configurations so we can use the standardized build process for all our projects
Support dashboard with "pretty" (for executive/director "eye" :-) reports.
Support Java, Maven, Ant, and be somewhat customizable for build process itself (though this is optional, as I can "fix" it with scripts)
I'd prefer free and open source tool, but paid version is fine too.
Please help :-)

It sounds like you're looking for Hudson. It already has built in support for Maven and Ant.

You may want to look at it
http://www.thoughtworks-studios.com/company
ThoughtWorks Deployment Management Solution combines the power of
Twist (Agile testing) with Go (release management).
Twist captures the requirements to be
tested directly from business users
and then supports their automation as
long-term tests that evolve with the
application. Go helps development and
IT operations teams model release
processes and deploy software
repeatably and reliably.

Continuum has rather good support for groups and rather straightforward test execution

Related

Bamboo Vs. Hudson(a.k.a. Jenkins) vs Any other CI systems [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Anyone out there have experience with both Hudson and Bamboo? Any thoughts on the relative strengths and weaknesses of these products?
Okay, since folks keep mentioning other CI products I'll open this up further. Here are my general problem. I want to setup a CI system for a new project. This project will likely have Java components (WARs and JARs), some python modules, and possibly even a .NET component. So I want a CI server that can:
Handle multiple languages,
Deploy artifacts to servers (i.e. deploy the war if all the unit tests pass.)
I would also like something that integrated with a decent code coverage tool.
Good looking reports are nice, but not essential.
Multiple notification mechanisms when things go wrong.
I'm not worried about hosting. I'll either run it on a local server or on an Amazon instance.
Also, this maybe pie in the sky, but is there something that can also build iPhone apps?
Disclaimer: I work on Bamboo and therefore I am not going to comment on features of other CI products since my experience with them is limited.
To answer your specific requirements:
Handle multiple languages
Bamboo has out of the box support for multiple languages. Customers use it with Java, .Net, PHP, JavaScript etc. That being said, most build servers are generic enough to at least execute a script that can kick off your build process.
Deploy artifacts to servers (i.e. deploy the war if all the unit tests pass.)
Bamboo 2.7 supports Build Stages, which allow you to break up your build into a Unit Test Stage and a Deploy Stage. Only if the Unit Test Stage succeeds, the build will move on to the Deploy Stage. In Bamboo 3.0 we will support Artifact sharing between stages, allowing you to create an Artifact (e.g. your war) in the first Stage and use this Artifact in the following Stages for testing and deployment.
I would also like something that integrated with a decent code coverage tool.
Bamboo comes with support for Clover and also has a plugin available for Cobertura.
Good looking reports are nice, but not essential.
Bamboo has a whole bunch of reports which are nice, but not essential :)
Multiple notification mechanisms when things go wrong.
Bamboo can notify you via email, RSS, IM, an IDE plugin or a nice wallboard that is visible to the whole team.
I'm not worried about hosting. I'll either run it on a local server or on an Amazon instance.
From experience, it is generally cheaper to host your own CI server. But if you need to scale, Bamboo makes it easy to distribute your builds to additional local agents or scale out to Amazon via Elastic agents.
Also, this maybe pie in the sky, but is there something that can also build IPhone apps?
Similar to the answer to your first question, most CI servers will be able to build iPhone apps in some ways. It's possible that there is a little more scripting required though.
Price: Bamboo is not free(apart from our free starter license)/libre/open-source, but you will get Bamboo's source-code if you purchase a commercial license and full support. Compared to the cost of computing power and potential maintenance required for a CI server, the cost of a Bamboo license is rather small.
Hope this helps.
I have not used Bamboo but I have used Hudson, Cruise and TFS and out of all of them Hudson was hands down the best. It is ridiculously easy to set up and has a really nice web GUI for project configuration. What is great about Hudson is that it supports pretty much any language and feature you could want assuming someone has written a plug-in for it, which they probably have.
http://wiki.hudson-ci.org/display/HUDSON/Plugins
We used it to run .NET, Java and C++ builds on timed intervals as well as SVN checkins with automated test harnesses and it was great. The place before last I worked at started some iPhone development just before I left and I believe they were using Hudson for that too.
Plus it's free!
Bamboo vs Hudson, at a very superficial level, seems to come down to:
Bamboo: Easy to use and good looking
Jenkins: Rough around the edges, but is far more flexible than Bamboo
Both Bamboo and Jenkins have numerous bugs (you will run into problems) but at least with Jenkins you are much more likely to have a workaround until it's fixed. With Bamboo, you're stuck waiting for an update.
Disclaimer: I'm working with Jenkins.
In our organization (quite big, more than 100 developers), we found also these two features very useful:
CAS plugin with matrix project security strategy
Build Pipeline Plugin
LTS release schedule.
About your questions:
OK
SCP PLUGIN or SSH PLUGIN
We use FINDBUGS, Static Analysis Collector Plug-in, Static Code Analysis Plug-ins, Task Scanner Plugin
Previous at point 3 + Jenkins DocLinks plugin
We use email Jenkins Email Extension Plugin, but it supports also other systems, like rss, twitter publish, sms...
We are running in a Tomcat Hosting, Locally.
Yes.
Well, I haven't used Bamboo so far, but one difference is that Hudson is free/libre/open-source software.
If you're willing to pay for it, Anthill does all of these you're looking at. We use it at my firm for our web team, and it's pretty powerful.
Handle multiple languages
Out of the box, it automates your existing scripts and manages the artifacts they produce no matter what language.
Deploy artifacts to servers (i.e. deploy the war if all the unit tests pass.)
Deployment can be added as a step in your build process. I'm not sure you'd want to deploy directly to production, but you certainly could if management says you have to.
I would also like something that integrated with a decent code coverage tool.
They integrate out of the box with Clover, Cobertura, Emma, Checkstyle, CodeSonar, Coverity, FindBugs, Fortify, Klocwork, PMD and Sonar.
Good looking reports are nice, but not essential.
I'm not sure what reports are available but there is a reports tab (I don't go in there :-) )
Multiple notification mechanisms when things go wrong.
I know it can do email (and therefore sms), integrates with a few IM services.
I'm not worried about hosting. I'll either run it on a local server or on an Amazon instance.
I saw a demo of them firing up a cloud session from an image, complete with an agent for deployment. We run it on a typical Linux box, but I know some folks run it on a VMWare server.
Also, this maybe pie in the sky, but is there something that can also build IPhone apps?
This would fall under the first one, probably.

What is a BPMS?

What is BPMS? and when to go for BPMS? is there any free tools for .net or java? is there any plug-in available for eclipse?
It is short for Business Process Management System or Software and basically is a tool for very high level modelling how the business will do whatever they do and how automation tools are integrated.
These things are typically huge and composed of a big collection of tools and infrastructure stuff. Eclipse based tooling may be a part of that, but it is much larger than just a plugin.
If you want to dip your toe in these waters you might look at JBoss Tools which has support for JBPM and Webservices which is a workflow package and the infrastructure which is usually core to these systems.
Good Luck!
As Peter said, BPMS is a huge topic. To get an idea of its scope, check out IBM's home page on it here: http://www-142.ibm.com/software/products/us/en/category/bpm-software
Have a look at the Activiti BPMN 2.0 engine. It is still in beta but a project everybody interested in BPM software should know about. It is implemented in Java and an Eclipse plugin also will be part of the set of tools.
Stardust, the Eclipse Process Manager,is a comprehensive and mature BPMS which is part of the Eclipse release train since the Kepler release. With over 2.5M lines of code and 726 person years Stardust is the largest Open Source BPMS.
As opposed to many Java-centric BPMS, Stardust also provides proven .NET integration capabilities on servcie and UI level.
The process modeler is avalibe for Eclipse or purely browser-based. The runtime environment can be used from inside Eclipse (WTP integration) or standalone (maven build).
Please see http://www.eclipse.org/stardust/ for more details.
Best regards
Rob
BPM - Business Process Management is a systematic approach to streamline an organization’s process to make it efficient and effective, to suit the changing environment around.

Has anybody real world experience with buckminster?

I'm currently evaluating ivy, maven and buckminster to ease our build process. Conceptually buckminster seems the most advanced, but also to have quite a complexity.
I can't find so many first hand experiences to buckminster on the web, therefore my question to the Stackoverflow community.
We adopted buckminster for our build process in July.
Our set up was to use Ant being run by a CruiseControl server.
We chose it as we have multiple projects living in multiple repositories. We have several RCP products that use different combinations of these projects.
Managing the checkout (and build) for each of these products had to be run off the metadata which we were writing already (manifest files, product files). It was just too easy to get the build and dev metadata out of synch.
Building bundles and generating a product still is not easy to do by hand.
New starters need to be up and running quickly. Two+ days to set up a dev environment is not acceptable.
Overall, I found that it is a very powerful tool with poor documentation. There are lots of new concepts, and because it is a framework to plug tools into, some of those names for these concepts can be quite abstract.
However, buckminster absolutely excelled at solving the three problems detailed above.
Other additions:
It can bootstrap itself, as in: it can check itself out, given a minimal core
It seems to be under active development
Support via the mailing list is terse, but generally helpful.
It has a rudimentary scripting language. Very rudimentary.
On the downside (apart from the lack of docs):
it is still not mature - you find the occasional bugs, and some features which just should be there, but aren't.
I could not work out how to make the test bundle work
Testing OSGi products is still non-trivial and not easily made headless.
Overall, I would say that it took a while to bed in, but does an excellent job. I cannot compare it with Ivy or Maven, though Spring's adoption of OSGi may give critical mass in developer mindshare to Maven.
I have answered a few questions concerning buckminster, for help when you start.
We use buckminster running via Jenkins to build a KNIME (eclipse) update site with multiple plugins / features hosted in multiple repositories. Initial decision was because that it how the KNIME community contributions are built. There is a learning curve, but once it is running. A lot of our initial setup process was based on the instructions at Developing plugins - continuous integration with Jenkins

What do you use for a complex build process? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 6 years ago.
Improve this question
I am trying to revamp our build process, which is currently a gigantic Ant build.xml that calls into other ant build files and executes several Java classes to perform more complex logic that would be impossible/scary to attemp in Ant.
Background:
experience in Java and Ant, some Groovy
Windows platforms
Goals:
run as a combination of command line cron and when a servlet is posted to
as simplified as possible, fewest languages and bouncing between techs
I need higher level logical power that a language like Java provides and Ant is pretty easy and we use the filtering to override default properties files for different clients. Mostly I'm wondering if there is something other than Ant/Java that people use.
Except the Ant you mentioned and the scarry make/autotools, the mainstream tools are:
SCons
Jam
CMake
Maven
I use SCons, because it is python based, well-funded and elegant.
Jam seems to be the most pragmatic one.
I don't know too much about CMake.
Maven may be the choice for you as it is Java centric and more high level than Ant.
More you can find at wikipedia: List of built tools
If you pursue Maven, then you will have two problems: a complex build and learning the f#*#ing "magic" of Maven. Maven just makes the problem worse because it is obtuse and overly-complicated.
I inherited a legacy Maven 1.x build at a large Fortune 500 company. I used Maven 2.x by choice on many other projects in recent years. I evaluated Maestro, in hopes that it might make Maven tractable. My conclusion, like many other peoples' (check the 'net), is that Maven is a big step in the wrong direction. It definitely is not an improvement over Ant.
I have used Ant for MANY years, including writing a large open-source library of Ant helper scripts. I have also extensively used its .NET cousin nAnt. However, Ant has two major failings. One, XML is simply not the right place to be doing build tasks. Two, Ant and XML do not scale well to large, complex builds. In fact, I have written a lot here at SO about my experiences in that arena (and with Maven).
Industry leaders have concluded that a build is just another application, and should be approached using general application tools. However, since it involves system-level and cross-platform functionality, most development languages/platforms are not properly suited (which includes Java, and therefore Ant and Maven). That also excludes .NET.
I spent two years looking for an alternative, and I found it: Python. It has the right combination of system-level access, cross-platform portability, simplicity, readability, power, robustness, and maturity. SCons, buildbot, setuptools/easyinstall, and base Python are my current target platform for the build process. When necessary, integration with Ant, Maven, and any other such tool is easy. Meanwhile, I can use these tools for the core of any build on any platform with any source language. No more roadblocks, no more crazy complexity, no more supposedly-helpful "declarative" scripting, no more black-box f#*#ing "magic".
If you can't switch to Python, then try Ant + Ivy (at apache.org). It gives you Maven's cool repository without most of Maven's evils. That is what I am doing as well, where necessary and suitable.
Best wishes.
Also take a look at
Gant
Gradle
While more general purpose build systems like SCons are very powerful, the Java support is somewhat limited in comparison to systems specially tailored to build Java projects.
I like using Rake as you can fall back on the power of the whole Ruby language and it's framework library when needed.
I use Ant, taking advantage of its macro feature. If you layout your project in a consistent mannner, you can eliminate a lot of the duplication by writing macros.
I've been building up an Antlib containing macros and custom tasks that I reuse across multiple projects.
Alternatively, some people swear by Maven. Other people just swear about Maven.
I use Maven, not just for build, I also use their release/dist plugin.
In a pair of commands I can have code that was in a source control to build, package and release.
The release plugin handles updating the version numbers, dist handles how to put everything together and zip it.
Ant looks hard when compared to Maven. Sure there is a learning curve with Maven, but reading a pom.xml is far easier than reading a build.xml.
Maven needs to be far less verbose.
I like Ant but only if you spend the time to write your own Java plugins to encapsulate complex actions. It isn't hard but unfortunately most people try to write their logic in XML w/the ant-contrib stuff. I think this is a huge mistake.
I've heard good things about rake and the groovy tools (mentioned in another comment) but I've got no experience with them.
If you're trying to script together several steps in a life-cycle you might be better off using a process automation based build server like AnthillPro (Cruise, BuildForge and Electric-Commander are the others in this space).
Another place to ask this kind of question is the CITCON mailing list. CITCON is a conference on Continuous Integration and Testing and the associated mailing list has turned into a really great community around these kinds of topics.
(I'm an organizer for CITCON but a labor of love not a profit maker. It really does have a really helpful mailing list. If I was pimping something for money it would be The CI Guys. ;-) )
Stick with Ant since you're building Java. I've mixed Ant/SCons for some JNI work, but in general I'd stay with Ant especially since you've got an existing build setup in Ant. Porting to Maven will be like shoving a square peg through a wall with no holes.
Embrace your custom Java logic for any and consider writing proper Ant tasks instead of executing external Java code. I solved some very complex parts of our build process by simply extending Ant to do exactly what I needed, ex. managing icon resources for a large gui project or injected subversion information directly info jar manifests (thank you SVNKit)
I'd go with Ant any day of the week.
It's not perfect; XML is very verbose and implementing any logic at all is almost impossible, but even the most junior engineer on the team can at least understand what the ant file is doing within a day.
Complex logic can be refactored using java and integrated in ant, if you so wish. Ant gives you all the power of java:)
Dependency resolution is difficult no matter what system you use. With ant, the best solutions seem to be either a lib directory in which all your jars are stored, or an internal web server from which the libraries are copied at build time.
I also have some experience with both Maven 1 and Maven 2. That experience left me with the feeling that Maven is awesome for hobby projects, but can have complications for software you need to maintain over time.
I see two important problems with Maven:
Any dependency you import using Maven may change over time without you knowing it, resulting in weird problems.
You import the licenses of not only the software you import directly using Maven, but also the licenses used by the libraries which are indirectly imported
In short, I dislike the fact that the build depends on the time it is started. That can be a true problem when producing a bugfix release a year after the production release.
These problems can of course be managed (maybe using a nexus proxy) but you need to consider them before rebuilding the build system. At my company we decided to use Ant for all new project and try to port maven 1 and 2 to ant whenever the occasion presents itself. It's just too difficult to keep it working.
My advice, if you and your team know how to deal with ant, try to refactor your ant file and don't jump on some other build tool. It just takes too much time to get it right; time you could spend making money and surviving as a company :)
I use Rake everywhere I can. Where you need to build java code you might use it with jruby, or look at something like: buildr
We use luntbuild. It's a web app that's very easy to use. It will check out from CVS/SVN, automatically increment the version/build number, execute build tasks in ant scripts and tag your repository with the new version. Can schedule automatic builds, have it email you or contact you via IM, also has security and build dependencies.
We're still using version 1.2.3 but I see it's up to 1.6.0. It just works.
http://luntbuild.javaforge.com/
EDIT: Re-reading your question I see now that you're looking for something to replace Ant. In our case Ant is not really a problem. We have projects setup in Netbeans, which uses Ant for building and we just have to implement some hooks into the existing scripts provided by Netbeans which is very easy to do.
EDIT: Looks like you can call Ant from Groovy. That would be nice because then you can re-use all the tasks that already exist for Ant.
http://groovy.codehaus.org/Using+Ant+from+Groovy
Try FinalBuilder
It provides a GUI interface to whatever your build process may be and has a native action for almost everything, plus an action studio where you can create your own.
With a bit of planning can be very streamlined.
I have to add to these one solution that I find I can't live without ... its called Hudson. It only takes a few seconds to setup and you can usually get away with most of whatever your existing ANT files are already doing.
Additionally, Hudson provides a great way to "cron" builds, execute test cases, and generate "artifacts" (e.g. build products) in a way that anyone can download.
It is hard to capture all that it can do for you ... so just try it out ... you will no be disappointed.
Maven is really good choice to do large builds...in the majority of the cases where it doesn't work is very simple. The people misunderstand the concepts of Maven. If your are working with the "maven way" you will end up with smaller modules which gives you a better architecture in your software. On the other hand things like Hudson will support you in reducing build times by using Maven, cause Hudson supports to build only changed modules which is not supported by any other build tool. The problem with Maven is to learn and understand the concepts of Maven for example the structure of a project(folders etc.) or only a single artifact etc. The build-cycle will support you in different areas: compiling, packaging, deployment and release which is not supported by other tools (only if you implement it by hand...I've wrote many large Ant scripts to reach this)...Other problem like changes over the time are caused by ignoring the best practice and pin pointing versions which are used.
I use mainly Ant, but Maven is also a good tool. With ant you can do anything you want.
At our company, we created a general purpose ant builder that does a lot of things: Build, Compess images, minify, generate documentation, pack files.. It is open source and we are open to improvements. You can get it here:
https://github.com/edertone/TurboBuilder

Which software to use for continuous integration of a Java web project

We're in an early stage of a new web project. The project will grow and become complex over time. From the beginning we will have unit and integration tests using JUnit and system tests using HtmlUnit. We might also add some static code analysis tools to the build process if they prove to be of value to us.
If you're or have been involved in a project which uses continuous integration. Which software do/did you use and do you think it has payed off? Which software would you recommend for continuous integration of a Java web project?
Hudson (the best). Hudson Website
JetBrains TeamCity Pro. http://www.jetbrains.com/teamcity/index.html
The Professional Edition does not require any license key. TeamCity starts running automatically with the Professional Edition Server if no license key is entered in the program. A single Professional Edition Server installation grants the rights to setup:
3 Build Agents at no additional cost
20 User Accounts
20 Build Configurations
Having used both CruiseControl and Hudson , I can recommend Hudson as the easier of the two to config (easily done via the web GUI, though direct configfile editing is also supported).
Hudson is great and free:
http://hudson.dev.java.net/
Bamboo is great but costs $$
http://www.atlassian.com/software/bamboo/
I've been very pleased with Atlassian's Bamboo. Even though it is commercial, the Starter Pack license is just $10 for 10 users. It's very well documented, easy to set up and flexible.
CruiseControl works reasonably well once you get it configured.
http://cruisecontrol.sourceforge.net/
I've used CruiseControl for Java projects, and CruiseControl.NET for .NET projects, and both work great.
I setup CruiseControl for a project that's been running for 4 years with several dozen developers, and while the configuration has been tweaked several times in the interim, it works great. (I don't actively support that project anymore, but I still work with the people who do.)
In my current position, CruiseControl.NET is being used to support several .Net projects, and has been used for 2+ years.
CruiseControl
CruiseControl is both a continuous integration tool and an extensible framework for creating a custom continuous build process. It includes dozens of plugins for a variety of source controls, build technologies, and notifications schemes including email and instant messaging. A web interface provides details of the current and previous builds. And the standard CruiseControl distribution is augmented through a rich selection of 3rd Party Tools.

Categories