Question

I'm planning to propose to my (very small) company that we buy a computer to run continous integration on. If they say yes, the task of actually buying the machine will probably fall on me, so my question is:

What do I look for in a computer that will be used for continuous integration for a very small (3 people) php team?

What "stuff" (memory, processor, etc.) are important, and what are not?

Was it helpful?

Solution

You're not really going to need that powerful of a machine. If you are running tests or other metrics, processing ability is probably your primary concern but really you could run that on an old pentium 1 and it would probably work.

Your constraints are going to be your operating environment. If you are running LAMP you want to use a machine that can handle LAMP setup well which is pretty much any *nix machine that is fairly modern.

I set up a continuous integration setup for .NET on an old Pentium4 workstation we had laying around and it handled just fine.

One thing to keep in mind is storage space if you are archiving your code in the build.

OTHER TIPS

Storage became the issue for us when we were using Maven, Continuum and Clearcase and building hourly. The snapshot views were being left around after each build.

We had a powerful enough box (Sun Fire V490) and used it for our development integration environment and Archiva repository. So we never really had any issues with performance and memory. In fact the only time we had a problem with PermGen memory it was building the Maven site target and that just meant using -XX:MaxPermSize=128m.

From my experience, this does not have to be a powerhouse machine. Any machine you'd use for development would be more than satisfactory. Obviously, the faster the machine, the faster the response if you are running unit tests on code commits. Our CI server is running XP SP2, 3G processor, 3G of RAM, and it's way overpowered for our needs right now. That said, it's nice to get an email no more than 6 minutes after you commit that lets you know if the build is clean and all the tests pass. For doing nightly builds, the specs can probably go down more, as you probably have more time to get those done. Hard drive space (300G is reasonably attainable these days) is nice for storing reports and builds to regression, but if you have a NAS you can probably push off artifacts after they've been built.

Pretty much any new machine you could buy today can handle the task of continuous integration on a not-too-large source tree. Some things to look for:

  • 2-4GB of RAM, more if you want to run many tests in parallel or you want to run virtual machines to simulate clients.
  • A multi-core processor (or multiple processors) to increase the chances of catching threading bugs.
  • "Server" class machines tend to handle 24/7 operation better than "desktop" class machines, but there is no clear line between the two.
  • RAID1 or RAID1+0 redundant disks are a must. Even if you have backups (and you should have them anyway) it's a pain to rebuild a server and an extra $100 hard disk is more than worth the money as insurance.

RAM: enough to run your CI tool (phpUnderControl?) and whatever supporting software you want for your build and tests.

Storage: decide how many old builds you want to keep on the machine. In my experience it isn't useful to keep very many, esp. if you have small team w/out a lot of formal process for rolling back to older builds.

CPU: non-issue. Any machine you can buy will work.

So between the two I tend to favor RAM over Storage space.

Unless the app is huge I'd just get a dual core box with about 4 gigs of ram and probably 2 reasonably fast SATA disks set in RAID 0. 500 Gigs maybe?

If you want to be really safe with it, get two 70ish gig drives for RAID 0 for the OS partition and then 3 140+ gig drives in RAID 5 for the data.

The machine performance hardly matters, but take good care of availability because once you start using it and one day the magic smoke gets out, you need it replaced soon to continue working. Define a sensible backup policy and make sure you know how to set up a new identical system when necessary. For example, you might have it run from a small partition that you can image into another machine, and then the main part of the data can be physically moved if it resides on RAID1 and at least one drive works (though have a backup available elsewhere on the network as well).

I think one thing that a lot of people here are getting at is the machine isn't as important as the CI software. The only time the machine is important is if you need different architectures. Otherwise, get a machine that matches your target environment. If you are building a server app, it might be wise to get a 64bit processor since your app probably will be running on a 64bit server.

I would care more about which tool I'm usinging for CI. You need something that will run fast, and as people here have pointed out, it shouldn't hold onto the old builds unless you need them to be available. If so, I'd look for something that allows uploading builds and results to a separate server.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top