|
I was recently asked how I handle build binaries. There are multiple answers to this depending on the Product being built. We maintain code for many products, some of them for external use and some internal use. Some of them are over 20 years old and the development and build processes are drastically different from the more recent ones. The one I will concentrate on in this case study is the one I am primarily involved with. The tools involved are AccuRev for Version Control, AnthillPro for Build Management and a custom Release Management tool of my own creation.[1] There are two standard promotion models:
We use this second model. During a build, two types of binaries are created and another is consumed. These are:
Deliverable Binaries -- These are initially preserved in AnthillPro as Artifacts as well as externally in a CM controlled staging area available in read-only mode to both Development and Quality Control (QC). Since we do thousands of builds per year, keeping all of these potential release candidates (especially when we know they were never released) would present an unacceptable storage problem. This means that when QC selects a build for functional testing, they do so from either the artifacts or the external staging area, depending on their needs at the time. They have a finite time to do so before they exceed an age or quantity limit at which point the deliverables (artifacts) are automatically removed from the system. As a part of the Release Management system, QC has the ability to perform a release of a build as either an Internal Test Candidate (ITC) or a formal Release Candidate (RC). ITS releases are primarily used by QC to perform functional tests, while RC releases are used for final regression tests. In either case, a target release "name" is specified. Selection as either type of release prevents the build from being purged unless a subsequent release (either ITC or RC) is performed. If that happens, and it does all too frequently, the Artifacts and any associated archives are replaced by the subsequent release and and the original build allowed to once again be purged by the system. The primary difference between ITC and RC releases is that RC releases perform additional archival steps. All associated Artifacts are replicated to CM controlled archival storage and from there backed up by the IT department to tape for both local and off-site long term storage It can get complicated to describe, but what is really happening at this point is that the deliverables are being moved around and tagged with the appropriate release identification information. Everything else is more of an electronic signature and approval process. Once Quality Management actually approves an RC release, it is released to one or more CM controlled external staging areas and a status in AnthillPro is set to Preserved to flag the original build so that neither its Artifacts nor its associated metadata (logs, reports, metrics, build records, etc.) will ever be purged from the build system. Beyond that, it is up to the end-user to elect to install or upgrade from the appropriate staging area. Of course, all successful builds trigger a snapshot in AccuRev, so it is easy to trace back from the Release all the way to the source that was used in its construction. Intermediate Binaries - These are discarded after each build. If we were interested in build optimization for developers we would keep these around so that dependency style conditional (incremental) builds would be possible, but since each of our builds is a potential Release Candidate, we do clean builds from controlled source (maintained in AccuRev) all of the time. Consumed Binaries - For Product builds, we treat these just like source code and keep them in AccuRev. AnthillPro has a mode of operation called CodeStation that allows the storage, control and versioning of large binaries that change at reasonably infrequent intervals and that in turn can be selected as a part of each build's properties. We plan to use this capability when we start building DVD ISOs for field installation (where some of the binaries will include a specific Product Release, a database management system (embedded), specialized drivers, tool installation packages, etc.), but we do not use it for our current Product builds Note that we did evaluate using CodeStation to control the use of FOSS Third Party components in Product builds. CodeStation and AnthillPro worked well, but it was a problem for developers doing local builds under Eclipse on their workstations. Due to our development paradigm, it was decided that this was not a good solution for us, even though it gave CM greater control over the use of external components. Other organizations that do not allow their Agile Developers to change these components at will, might well have better luck using CodeStation for FOSS component control in their builds. Ben Weatherall is currently based in Fort Worth, Texas where he practices Practical CM on a daily basis using a combination of CVS and custom tools to support a modified Agile-SCRUM development methodology. He is a member of IEEE, ASEE (Association of Software Engineering Excellence – The SEI’s Dallas based SPIN Affiliate), NTLUG (North Texas Linux Users Group), and PLUG (Phoenix Linux Users Group) [1] Note that there is no reason I could not use AnthillPro to perform the Release Management functions other than the infrastructure involved in the release procedure predated the adoption of AnthillPro and just replacing it for the sake of doing so is NOT what I consider a good use of my time.
Set as favorite
Bookmark
Email this
Hits: 3508 Trackback(0)Comments (0)
|
| Last Updated on Tuesday, 21 July 2009 14:57 |


I was recently asked how I handle build binaries. There are multiple answers to this depending on the Product being built. We maintain code for many products, some of them for external use and some internal use. Some of them are over 20 years old and the development and build processes are drastically different from the more recent ones. The one I will concentrate on in this case study is the one I am primarily involved with. The tools involved are AccuRev for Version Control, AnthillPro for Build Management and a custom Release Management tool of my own creation.[1] 
