|
Many in the software engineering world considers build, package, and deploy the core areas of Configuration Management (CM). To highlight this, many CM jobs are titled “Build Engineer” or “Release Engineer” with responsibilities that focus on the tasks of building, packaging, and deploying releases.
While most CM’ers know there is much more to CM than build, package, and deploy, there is significant focus and visibility in this CM area by the project team. In addition, the build, package, and deploy process typically uses other CM processes such as problem management and change control. This is why build, package, and deploy processes are considered so important to a development lifecycle. Overview This article hopes to provide you with the building blocks for creating solid build, package, and deploy processes. The next several sections walk through a description of each process area with a step-by-step process flow, which can be customized as appropriate. The context of this topic is in terms build, package, and deploy. Build is defined as the ability to identify the components to be built and compile/generate runtime deliverables. Package is defined as the ability to identify the pieces to configure into a working system and validate its readiness. Deploy is defined as the ability to take a validated release package, approve it, and deploy it into production. However, these processes can be combined together and/or exist under different names. Some people call it the release process, the build and release process, the build and migration process, amongst other names. The importance is not the name of the process, but the name with a corresponding description so everyone is clear on what needs to be accomplished Build Build is further defined as identifying a set of source items and through some means of compilation or generation (via a compiler, IDE, etc.), produces a set of executables and other files which can be used to perform a runtime function. When considering a build process, start with identifying the build types that exist (in general, there are four types). Build Types Private builds – A Private build is described as an individual developer working in isolation (private workspace) who builds their code separate from others. The Private build is typically against a baseline (or configuration) of code that changes regularly. Synchronizing recent changes (if this is appropriate) into the private workspace point in time the developer is testing against. Integration build – An Integration build is described as individual code changes promoted into an integrated workspace and built together. If the result is a build with no errors that passes some (or all) level(s) of testing and meets the some (or all) level of requirements, the Integration build can be known as a test build or a release build. This is typically an evolutionary process. Integration builds may be continuous (e.g., nightly, weekly, etc.) since this may reduce the effort of merging individual code changes and uncovering build issues sooner. The project or development manager should track the changes going into a build (particularly as the release date approaches). Test build (sometimes known as QA builds) – A Test build is described as an Integration build with the goal of handing off the deliverables to the Test team to validate the functionality against stated requirements (which we hope are documented!). Validation may include regression tests, performance tests, and eventually user acceptance tests (which may be done by customers of the product). Release build – A Release build is described as an Integration build with the goal of being released into ‘production’. It should have met the test criteria so it is now release ready and can be shipped to the customer. Effectively, a Release build always starts as an Integration build and follows the same build process. The Integration build will meet a milestone level of completeness (test build) and then the full requirements (release build). In many cases, a project team may not call it the Release build until they know that it has tested correctly. This is why it is important to label the build items after a successful build especially as the team approaches the release date. Also, in some cases as the release date is approached, all builds are called Release builds in hopes that one of them will pass appropriate tests and be deemed ready for release. Build Process Prior to performing a build process, a build infrastructure must be in place. This typically includes validating the platform in which the build will occur, identifying and installing appropriate compiler/translator/IDE tools, and establishing a clean-room build workspace. A typical build process includes:
Package Package is more completely defined by identifying all pieces that make up a package (eventually targeted for release) and validating its readiness via test. This includes the output from the build and includes other items like scripts, database items, documents, etc, that create a package of deliverables that runs in a test or production environment. Package Process A typical package process includes:
Deploy Deploy is further defined as preparing for the release of the validated package, having a group of stakeholders review the readiness of the deliverables, and having a process in place to install and validate the release package once it is in production. In many cases, this is known as the release process. Deployment Process Prior to performing a deployment process, a production infrastructure to host the release package must be in place. This may be in the form of a production system(s) or mechanism to install the release package onto media. Also, a change control process including a Change Control Board (CCB) should be in place to approve the release package into production. A typical deployment process includes:
Summary When implementing CM processes, build, package, and deploy can be a good place to start. It is usually one of the more visible areas where a CM’er can show value. It is not important to debate the name of the processes involved in this part of the lifecycle. If there are names that the project teams understands which represent the building, packaging, and deploying of deliverables (a.k.a., release package) into ‘production’, consider using them. The easier recognition may improve adoption. If there is no set process, consider documenting the current process and sharing it with the team. Once a process is defined, it also becomes a good basis for suggesting improvements. Ultimately, a CM’er must show (added) value and these processes are a good place to start. References
Mario Moreira is a Columnist for CM Crossroads, a Director/Architect of Technology, an Author of CM publications, and has worked in the SCM field since 1986. He has experience with numerous SCM technologies and processes and has implemented SCM on over 100 applications/products, which include establishing global SCM infrastructures. He has an MA in Mass Communication with an emphasis on communication technologies. Mario also brings years of Project Management, Software Quality Assurance, Requirement Management, facilitation, and team building skills and experience. Mario has released a new SCM book entitled, “Software Configuration Management Implementation Roadmap”. It can be found in the CM Crossroads bookstore (search for Mario Moreira). This book includes step-by-step guidance for implementing SCM at the organization, application, and project level and includes helpful templates on CD to get started. You may reach Mr. Moreira by email at Mario.Moreira@cmcrossroads.com
Set as favorite
Bookmark
Email this
Hits: 9816 Trackback(0)Comments (0)
|
| Last Updated on Monday, 14 August 2006 07:38 |



