
I just started work on a Rails project, and I was setting up my development environment. Source control? That's easy, Subversion. IDE? Well, there are some promising projects like the
intelliJ plugin and the
jEdit plugin, but I finally settled on Eclipse with the RDT plugin. Database? Oracle 10g. Continuous Integration? ... Ahem, Continuous Integration!?! ... Unfortunately the Ruby continuous integration
field looks pretty weak.
Damage control looked promising, but active development is stopped, their source repository is down, and from what I gather the development team broke most of the functionality before they gave up on it. The rest of the solutions I found by googling involved rolling your own, shell scripts and cron, or using cruiseControl to trigger things, but cruise doesn't support rake. Finally, after copius googling I found a link to
Cerberus. The Cerberus page lists
Anatol Pomozov as the only admin on the project, so I assume he is the creator. The aim is to "guard your tests and not allow your project to go to the world of dead." I got this from the
README file which contains a description of
what Cerberus means.
What I like about Cerberus is that it is very simple to use. To install it you just do 'gem install cerberus'. Once installed you run the command 'cerberus add' followed by the repository URL, the name of the app, and a list of people who should get the emails. Finally you can run 'cerberus buildall' and Cerberus will run some rake tasks to build and test your project. It is very simple! Since cerberus isn't a persistent server it relies on cron for the automation, but for me that is just fine. There are some yml configuration files, but they are very minimal. You should have no problems figuring it out. I would have liked some more documentation because I bet there are some features not covered in the README, but overall I can't complain. I had continuous integration up and running in minutes. If you are looking for CI in Ruby, you should give Cerberus a shot. I think the ease of use will win it many fans in the future.
10 comments:
Hi, Cuberick.
Yeap, I am Cerberus creator. Thank you that you mentioned Cerberus in your blog. I hope that you've found Cerberus useful.
About documentation. There is a small amount of information you could find at Cerberus site http://cerberus.rubyforge.org/ And I would be glad if you ask me questions to know what people looking for in docs and what they want to know.
PS Contributions to Cerberus documentation are always welcome.
PPS Wouldn't you mind if I add you to http://cerberus.rubyforge.org/in_the_web.html page??
Anatol. Thanks for the link! I'm just getting started with Cerberus, but it was so easy to get started with I had to mention it, as I know there are more than a handfull of ruby projects out there that could use a good CI solution.
One issue I have is supplying credentials to subversion. When I run the build it asks for my user/password. The reason for this is that I have subversion setup not to cache the username and password on the machine. Is there a way to supply username and password to subversion through the config files?
Feel free to add me to your page, and as I gain experience with Cerberus I'll try to contribute what I learn to the documentation of your project.
Do you mean to add --username and --password options to 'svn up'?
I think that is unsecure to store plain password in file, but anyway it could be solutions in your case. BTW why don't you use subversion password cache??
PS Lets move our discussion to project forum http://rubyforge.org/forum/forum.php?forum_id=7343 It would be helpful for others.
Concerning --username and --password - it is not possible now.
That's not true. I read your blog. In fact this post came exactly when I was looking to decide between DamageControl, CIA or CCNet.. BTW Have you looked at CIA?
I didn't look at CIA, but thanks for the heads up. So far I think cerberus will be enough. We don't have much time to figuring out how to get our environment, and CIA looks like setup would be tricky.
CIA is developed by DHH but now it is not supported anymore and deprecated
http://article.gmane.org/gmane.comp.lang.ruby.rails.core/790
[...] Just came across this nice software on RubyForge while I was looking for some Continuous Integration solution for Ruby and more specifically Rake. Check out the web site and this post about Cerberus. Looks promising and could be a good match for Raven. [...]
If you are not limited to Ruby-only CI servers here is an extensive list of prjects in this area:
http://damagecontrol.codehaus.org/Continuous+Integration+Server+Feature+Matrix
[...] Different is good! Tonight at the Ruby User’s group we broke the mold. Instead of 1 long presentation we had many small presentations. It was a more energetic and spontaneous way to have our monthly meeting. This is the text equivalent of this meeting’s highlight reel. I was playing with Cerberus again, this time in front of a crowd. Everyone seemed pretty enthusiastic! I think it is important to encourage the Ruby community to develop their own continuous integration tool. The exciting part is that Ruby can bring much to this problem, especially given the fact that customizing Ruby applications is so much easier than with Java or other statically typed languages. After that little warmup Brendan Baldwin gave a fascinating little presentation on what he calls “Layers”. One member of the group pointed out it was alot like aspect programming, and Brendan himself said it was something akin to a visitor pattern without the requirement that the host class implement any special methods. I wish I had gotten copies of all the little demos Brendan did in irb. Well, maybe I can reconstruct them myself sometime. You can find a link to some of the “layers” code on his website. Peter Chan then gave a presentation on a grease monkey script he wrote that helps you keep your place while paging through text. This opened up a long discussion on how greasemonkey and firefox extensions are related. Then we ended with a presentation by Evan Farrar about the splat! (unary *) operator in Ruby. Not being one who delves too deeply into every nook and cranny of my programming language, I didn’t know what splat was all about. Here and here are links to some splatty goodness. See what I’m talking about? Sure this sort of thing can encourage some code that is terse to the point of illegibility, but Evan opened my eyes to a greater appreciation for doing things not because you should, but because you can. His ugly little demonstration encouraged me to be less dogmatic about the choices I make while programming. Breaking out of your comfort zone syntactically can be good for you if you learn something about the language while doing it. Another fun part for me came while discussing some trivial inconsistency in how Ruby handles multiple assignments. (This will certainly be fixed in a future release of Ruby), Evan was discussing the “problem” then paused and with a grin said (of the inconsistency) “While it lasts it is pretty fun.” I think this is a more aesthetically sophisticated way to look at such an anomoly. There is a beauty that is there just by virtue of uniqueness. Hold that ruby to the light, see if you can find your own irregularity. Appreciate it before someone polishes it out. [...]
Post a Comment