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.

40 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

    • Well where do we start, JEFF,BRENDAN,DANI,KALIA.. I mean she didn’t even hang on to the dummy longer than Kalia. The only resaon she beat Jeff is that he threw one of his clown shoes out of the balls. And Dani beat her in everything. Now the last veto she won I will give her credit her strategy was much better, than anyone else’s, but that is about the only thing I can say positive about her. She is not big brother all star material at all., To admit you have never watched the show, that is horrible. I mean really is she looking to play a dumb blonde on a reality show, oops she is already doing that. I will stick by what I said if they had not saved her with the golden key she would of have been gone a long time ago. It was her cring the first week after the told her they were saving her that she was being nominated she didn’t realize you had to be nominated to get the key Plus now she is trying to kiss Adam butt and try to ensure a vote and seeing is he can talk to Jeff that will never happen, Jeff knows as well as America she doesn’t deserve it.

    • As I see it, if the vote does come down to Adam, those girls need to get off there high horse and start kissing some Adam butt. There’s a big difenrefce between 1st and 2nd place when it comes to money. They were jumping around last night like they had already won the cash! Duh!!! This is a game people!!! Trust no one! One could be lieing to another and take Adam because they have a better chance. Stupid young girls.

  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.

    • Well Janet i totally agree that porcshe didn’t win anything untill the strong competitors were out..Rachel had to fight her butt off since day one and couldn’t sit around with a golden key for a month,,however here we are with the 2 that will likely sit in the final 2 chairs and quess who has to fight her butt off yet again the one who should legally win it all hands down Rachel -yeah adam said his vote would probably go to that last person that won the last hoh but i am hopeing Miss Dani will do as she says she would and vote for the best player of the game which is Rachel all the way Besides what will a 23 yr old do with the money versus Rachel who will marry a man is doing cancer research .. ..thats a no brainer .GO Racehl all the way !!!!!!!!

    • You noticed that too, about her lknoiog in the mirror also. Thank you!!! Also she is very jealous of Jordam when she made the comment on Showtime could you imagine if Jordan was here and Rachel just won’t talk bad about her and it drives Porsche crazy. Get over yourself you evicted her, but your still not number one in the house. Plus she was the first to tell Rachel to suck it up when Brendan left and I know Rachel has not forgot about that.

    • Seems like most people on here are Jordan fans, while I have to tell ya’ll Porshe is twice the pleayr Jordan is!! She’s no where near the best mind you but compared to Jordan she is an all-star. Give Porshe her due she came thru when it mattered no matter if in my opion all the great pleayrs were gone (same case with Jordan). It would have been great to see Jeff, Brendon and Dani in the end. Talk about ratings you would have seen it with those 3 in the finals, but it is what it is Rachel vs Porshe will be a good contest!! So could BB11 been better YES but it still is pretty close call. I think it still was a great season!! Looking forward to BB12.

    • I cannot get over Porshe weainrg the same Damn outfit’s .they must stink ( pee uuuu ) .She think’s her S doesn’t stink .she is not pretty at all .she keep’s that smerky look on her face and look’s at herself every chance she gets and flaun’t herself in front of Adam .who could be her Father ..I hate that she got this far in the game Don’t like her at all Rachel really really deserve’s to win she had to Fight last time hard and this time also ..She has changed alot .GO RACHEL

  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.

    • Janet thats what i said above i think Rachel stands a much betetr chance against Adam But look at it this way if Porsche wins that last one she will take rachel cuz if she doesn’t she loses all the vets votes and she knows that but lets just hope if that happens Adam will be bitter aganist porsche and vote for Rachel even tho hes says he won’t and did you hear when Porsche and Rachel were talking last night Rachel said she felt bad for Adam and Prosche said no i don’t feel bad for him he got to see tori blah blah blah and Adam had her back the whole game .Maybe a light is on in Rachel’s head and she will take Adam

    • I think Daniele will vote for Porshe. I know what she’s said about voting for the best ctoepmitor, but with Porshe’s comp wins, and the way Dani REALLY dislikes Rachel, I believe she’ll feel justified in voting for Porshe. And if she does, she’ll bring her other followers with her. Now, if it is Adam standing next to Rachel, I think she’d have a MUCH better chance at winning. I’d be surprised if she hasn’t thought of that, but .who knows

  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.

    • Die wolke is pragtig! Maar ek hou van die vesarrsinkies in die volgende groep ook. En die beste van alles is die blog of website (wat noem mens dit tog?) selfs ek kry dit oopgemaak en gehanteer! En jou taalgebruik is baie spesiaal kan skaars glo dis nie jou moedertaal nie.

  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="">