Really easy continuous integration with Signal

Signal is a continuous integration server written in Rails which I think takes the best features of similar systems and merges them in a very simple to use application.

When I started working with Rails, the first continuous integration server I tried was CruiseControl.rb. The CC.rb was also written in Rails and what bothers me the most about it is that to add a project you have to connect to the server and execute:

./cruise add [project-name] -r [repository] -s [svn|git|hg|bzr]

After running the previous command you can open a YAML file and configure the recipient of the emails that are sent by the application when the build breaks. In the scaffolding land, this makes no sense to me. It’s much more simpler to have a page where any user can register a project without much difficulty, like Hudson, Integrity and Signal does.

Another thing that bothers me about CC.rb is that it creates a lot of cruise processes and sometimes they hang. For a while I thought the problem was only happening with me but after talking with some people I found it wasn’t so uncommon.

The third thing I’ll complain about CC.rb is that at the home page it shows the last five builds of each project. IMHO the last two builds is already too much information. To know that the old builds were broken or not doesn’t mean anything to me. The only thing I care about is to know if the project is in a good state or not, information that Integrity and Signal display very well.

Integrity does a lot of things in a cool way, but I don’t like the fact that to install it you have to download the gem and then execute a command. The worst thing is that depending of the server you want to use, the command takes different parameters. Before explaining why this installation method is a problem, let me confess that another thing I don’t like about Integrity is that it doesn’t come with email support. Besides this lack of support be ugly, to include it you have to download another gem and modify a file. It looks simple but didn’t work for me, apparently because the version of the plugin gem was not compatible with the version of the application gem. Now, how do you change the version of an application that was installed by executing a command from a gem? Would it only require to download the second version of the gem and delete the first? Would it require to reinstall the application? I don’t know, maybe I did something stupid but nothing worked for me and this is why I believe that this way of dealing with applications is a problem.

Signal tries to take advantage of Git. To install Signal you can run:

git clone git://github.com/dcrec1/signal.git
cd signal
rake inploy:local:setup

If you ever want to go back to an specific version you just can git reset –hard COMMIT; simple, and it can take advantage of history by knowing where we are and what we are undoing.

One characteristic CC.rb has and I miss in Integrity is to show the date of each build on the home page. Signal shows how long ago each project was built, so we can easily know when was the last build and if they are being created.

report_card is a project that integrates metric_fu with Integrity, but it’s necessary to install another application and run a few commands, what is very complicated to me. It’s for this reason I decided that Signal has native integration with metric_fu, RSpec and Cucumber.

Signal’s integration with RSpec, Cucumber and metric_fu is very simple. In each project page there are three links: specs, features, and metrics, which point to ROOT/docs/specs.html, ROOT/docs/features.html and ROOT/tmp/metric_fu/output/index.html, metric_fu’s default path. This means that if we are generating HTML specifications, they can be accessed from the project page.

Another integration that Signal has is with Inploy. If we want to deploy an application, we can do it from the project page by clicking on deploy, the rake task inploy:remote:update will be executed.

Hudson is an very good integration server, but I think Signal overcomes it by being a little more simpler to use and by being developed in Rails and being hosted on GitHub.

Being developed in Rails is an advantage because this type of projects usually have several plugins and Rails has native support to plugins. Almost every railer knows how to install a plugin and how do they work, so it will not be a problem to create them.

Being on GitHub is an advantage because it facilitates further collaboration with the project. As today, Signal has a lot of conventions, but if for some reason anyone need some special configuration, he can fork the project and start contributing. Since Signal was developed with Rails and it’s pretty simple, people will not have difficulties to understand how it works.

One of the conventions of Signal is that each build is created by running the rake task build, which depending of the project I have something like this:

task: build => ['db:migrate', :spec, :cucumber, 'metrics:all']

I recorded a short video of nearly three minutes demonstrating how easy it is to install and use Signal. In the video I download the application and install it using Inploy. Then I register a new project and create a new build. The build is not automatically created along with the project because sometimes we need to perform some actions before running it. Just for demonstration purposes, I chose a project in Ruby that has a very fast build, given it does not run the Cucumber features neither the metrics. After the first build, I do start delayed_job and create a build from the command line, like being in a Git hook. The video ends with me showing a build of the project Signal and how easily it is to view the specs, the stories and metrics from the project page.

Really easy integration with continuous Signal from Diego Carrion on Vimeo.

If you liked Signal, please consider to recommend at Working With Rails.

30 thoughts on “Really easy continuous integration with Signal

  1. Thanks, looks great. I also had problems with Integrity installation and went back to CC.rb for the time being, but have never been happy. Glad you took the challenge of writing something better.

  2. @Timothy

    this shouldn’t be happen, will take a look to check what’s wrong, thanks for the feedback.

    @Raphael

    Yes, this sounds great. Will check the specification to implement the solution. If you already have an idea on how the XML may be formed and can help, it would be appreciated.Thank for the idea.

  3. @Raimonds

    Actually not, but I can implement it if you need it or accept a pull request :)

    @Andris

    Telefon Tel Aviv – Even Deeper, from the album Remixes Compiled

    Is a remix of a song from Nine Inch Nails

  4. We are currently using git branches in cc.rb – each project have several builds – development, staging, production branches. So if Signal would support it then we could try to use it instead of cc.rb :)

  5. Looks really good and I can’t wait to use it!

    I’m getting a git error from passenger:
    git version 2>&1:sh: git: command not found (Git::GitExecuteError)

    Running on Mac OSX 10.5 locally with git version 1.6.5.1. Git is accessible from the terminal since I use it all the time. May have to do with the owner of the app? If I find anything I’ll shout back.

  6. Saeed,

    are you trying to use Passenger?
    The same problem occurs on my machine as well when i try to start it up with Passenger. Any other App-Server (Thin, Mongrel, …) on the other hand seems to work fine!

    I think passenger has a problem with the PATH lookup…

    Cheers

  7. @Tom

    Please can you try to debug this? I’m using Signal in a Linux server with Passenger and I got no problems.

    Will try in another server machine.

    Thanks for the excellent information.

  8. I’m extremely pleased to uncover this great site. I wanted to thank you for ones time for this particularly fantastic read!! I definitely enjoyed every part of it and i also have you book-marked to see new stuff in your blog.

  9. The graphics should certainly be complementary towards the text and help in conveying the concept. The visitor ought to be capable of appear at a internet page and quickly know what to count on through the rest of your site, remember that very first impressions only count after, so ensure it is count. Webpage graphics in addition to their placement play a essential role in website design towards the point exactly where they may both make or break your internet site..
    nike air jordan retro 1 http://www.lindakopper.se/souliernike.asp?id=nike-air-jordan-retro-1

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">