This is really broad question but I was wondering if you could suggest some principes for continuous integration for a rails project. I currently test projects locally and write my own specs for clients. I’d like to start using CI as a central way of managing deployments. I traditionally understand continuous integration as a central point of testing the app for deployment but don’t know much more. Does thoughtbot use CI? tools? Jenkins? Does javascript code also get tested?
We’ve been using CI on most of our projects for a long time - maybe six years or so.
CI is useful for a number of reasons. It helps to keep the team honest about running tests, it helps catch erratic failures, and it can exercise your test suite in ways that you usually don’t, such as with a fresh repository checkout. The end result is that keeping CI green makes it more likely that you’ll have a green test suite whenever you start a feature or a new member joins the team. Some CI servers will also provide statistics, such as how long your test suite takes on average.
We’ve experimented with a number of solutions, including CruiseControl, Jenkins, and TeamCity. Currently, our preference is to use hosted solutions like TDDium, Travis, or Circle. Maintaining servers is not something we’re interested in or particularly good at, and managing and updating dependencies is a boring chore. These services take some of the pain out of running a CI server.
I’d recommend getting started with one of those. Feel free to report back with your experiences or any followup questions.