Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the purpose of a dedicated "Build Server"? [closed]

I haven't worked for very large organizations and I've never worked for a company that had a "Build Server".

What is their purpose?
Why aren't the developers building the project on their local machines, or are they?
Are some projects so large that more powerful machines are needed to build it in a reasonable amount of time?

The only place I see a Build Server being useful is for continuous integration with the build server constantly building what is committed to the repository. Is it I have just not worked on projects large enough?

Someone, please enlighten me: What is the purpose of a build server?

like image 456
KingNestor Avatar asked Jul 08 '09 16:07

KingNestor


People also ask

What is a build server used for?

A build server is a dedicated machine used for building your applications. Build servers often are referred to as continuous integration servers; the two ideas are slightly different, but they often are combined on the same server. Each time a developer adds new code, the build server is notified of the addition.

What is a CI server?

What does a CI server do? A continuous integration server (sometimes known as a build server) essentially manages the shared repository and acts as a referee for the code coming in. When developers commit to the repository, the CI server initiates a build and documents the results of the build.

What is a build machine?

Build Machine means a Server used to perform automated builds of software application (for example, a separate computer used to automatically create current versions of object based on source code modifications made by a group of Developers).


2 Answers

The reason given is actually a huge benefit. Builds that go to QA should only ever come from a system that builds only from the repository. This way build packages are reproducible and traceable. Developers manually building code for anything except their own testing is dangerous. Too much risk of stuff not getting checked in, being out of date with other people's changes, etc. etc.

Joel Spolsky on this matter.

like image 160
Matt K Avatar answered Sep 20 '22 23:09

Matt K


Build servers are important for several reasons.

  • They isolate the environment The local Code Monkey developer says "It compiles on my machine" when it won't compile on yours. This can mean out-of-sync check-ins or it could mean a dependent library is missing. Jar hell isn't near as bad as .dll hell; either way, using a build server is cheap insurance that your builds won't mysteriously fail or package the wrong libraries by mistake.

  • They focus the tasks associated with builds. This includes updating the build tag, creating any distribution packaging, running automated tests, creating and distributing build reports. Automation is the key.

  • They coordinate (distributed) development. The standard case is where multiple developers are working on the same code base. The version control system is the heart of this sort of distributed development but depending on the tool, the developers may not interact with each other's code much. Instead of forcing developers to risk bad builds or worry about merging code overly aggressively, design the build process where the automated build can see the appropriate code and processes the build artifacts in a predictable way. That way when a developer commits something with a problem, like not checking in a new file dependency, they can be notified quickly. Doing this in a staged area let's you flag the code that has built so that developers don't pull code that would break their local build. PVCS did this quite well using the idea of promotion groups. Clearcase could do it too using labels but would require more process administration than a lot of shops care to provide.

like image 25
Kelly S. French Avatar answered Sep 16 '22 23:09

Kelly S. French