Do most folks set up CI to build and
test their app on every push to their
central SCM repository, or only when
pushing to their staging branch?
Depends on the team size and velocity of the project. The more people I have working on diverse branches of the code, the more often and vigorous I want the CI to run. I would recommend you start with as much CI as you can muster and gradually back it off as you see fit.
I'll use the CI server to
automatically run flay, flog, reek,
and rcov -- are there any other
testing or code-coverage tools I
should run?
Everything covered by metric-fu is a good start. If your team has a tech writer and/or documentation is part of your delivery, you can throw rdoc in there as well.
I'm planning to deploy my app on
Slicehost. Should I set up the CI
server on a separate Slicehost slice
that's set up to be identical (wrt
installed gems, libraries, etc.) to my
production slice?
If you can afford it, yes. Usually small teams and fresh start-ups can't afford to have a dedicated server for every task, but I'm a huge proponent of isolation. Regarding the identical set-up, vendor everything that you can; setting up a fresh server should be quick, simple, and automated.
If I do use a separate slice for CI,
is there any harm in using the CI
slice for a staging server as well?
The only harm is cross-contamination between shared resources, e.g. gem versions, database resources, etc. If you're methodical you'll probably be OK, but if you can afford separate servers per environment I'd lean on the side of better safe than sorry.