About a year ago, I put together a PC to automate all of our QA-Ready and production builds. We don't have a huge number of applications to build, but I wanted an automated way to build each application. Before "Build Box", each project had one developer who was reponsible for the build.
This worked, but it had some serious limitations:
- It relied on a developer's machine to the build, which meant it required access to that developer. If he/she wasn't there, the team lead had to make sure that the machine would be accessable.
- Nothing was automated, no two products were built the same way. This opens the door wide open for mistakes like not having the current source code.
- Making a build was a major disruption for the developer who earned the build. This limited the number builds that would get buillt a day or week.
We use FinalBuilder to drive the build process. I can not say enough good things about FinalBuilder. It Just Works. With FinalBuilder, we use the following pattern to build each product:
- Get the latest source code. We use Vault, FinalBuilder knows how to drive Vault.
- Build the version information from .ini files stored in source control. With FinalBuilder, this was the easiest way to update the version number for the files. By alloing FinalBuilder to control the version resources, we can use the same mechanism for Win32 builds and for .NET builds
- Build the actual project or projects.
- Create updated installers. We use both the scripted and Windows Installer installer tools from Wise, FinalBuilder plays well with both. The only party of installer building that I can't automate, is the code to deal with upgrades in place. With Windows Installer technology, I need to handle that myself. That only happens once per product release, it's liveable.
- Deploy the latest bits to the QA server. QA gets two copies of everything. The first copy has the final filename, the second has the build number appended (ie. something_278.exe) to it.
- Send out an email to QA and the developers that notifies them that a new build has been released.
Now, any developer can remotely connect to the buildbox and start the build process. Of the course the fun part is getting the buildbox setup in the first place. It's like having another developer on the team, it gets everything installed.