I no longer work at Microsoft, so please don't bother leaving a comment here or trying to contact me through my MSDN blog.
You can find my new blog at http://www.technologytoolbox.com/blog/jjameson. My new site also provides copies of all posts from my MSDN blog.
This post provides a high-level walkthrough of the build and deployment process that I typically recommend on projects that I am involved with. It includes a series of illustrations that capture key concepts at various points in time. Specific parts of the process -- such as the development and build environments, versioning, and source control -- have already been covered in previous posts.
The following figure illustrates the initial build and deployment of the solution.
Note the following key steps (corresponding to the various arrows in Figure 1):
Figure 2 shows a subsequent build of the solution.
The steps performed in the initial build (illustrated in Figure 1) are repeated in this subsequent build. The key difference illustrated in Figure 2 is the inclusion of the installation guide (which documents the manual steps performed by the Development team during the initial deployment). The new build (in this example, 1.0.2.0) is then deployed to the DEV environment by following the installation guide.
While this deployment process is functional -- in that a new build of the solution is successfully deployed to the DEV environment -- it requires too much manual effort to sustain the process. Figure 3 shows yet another subsequent build in which the manual installation to DEV has been replaced by an automated process.
Note that in Figure 3, the automated installation process actually installs version 1.0.3.0 but installs it from the Latest folder on the Release Server. At the point in time represented in Figure 3, the contents of the Latest and 1.0.3.0 folders are identical. Using this mirrored structure greatly simplifies the automated installs of the latest build into the DEV environment. Also note that the build illustrated in Figure 3 includes install scripts, in addition to the build output (i.e. compiled code) and the installation guide (which has been updated to specify the install scripts to be used for installing the solution). These install scripts are a key piece of the automated installation process -- and subsequent “manual” installs into other environments (as described below).
Note that the process illustrated in Figure 3 does not require any manual intervention and can therefore be performed on a scheduled basis (à la, the “daily build”) or ad hoc, simply by executing the scheduled task as desired. Each subsequent build includes the source code changes checked-in to the source control system -- thus incorporating new features and bug fixes -- and is automatically installed into the DEV environment -- thus providing visibility to all team members on the progress of development. This is particularly useful for the Test team (in order to create test cases).
Note The daily build provides a “heartbeat” of the development effort that can be monitored regularly by all team members – not just the Development team.
As this cycle repeats (as more features are implemented in the solution), the Test team – in conjunction with the Development team -- identifies a specific build of the solution to promote to the TEST environment. This is illustrated in Figure 4.
Note the following key concepts illustrated in the previous figure:
Just as the daily build process (illustrated in Figure 3) is repeated throughout the development process, the promotion of selected builds to TEST is also periodically repeated, albeit much less frequently. This is illustrated in Figure 5 with the first “release candidate” of the solution.
Note that if issues are discovered with the RC1 build, it may be necessary to promote yet another build to the TEST environment, as illustrated in Figure 6.
Assume that the second release candidate (version 1.0.379.0 in Figure 6) passes all of the test cases. The final step is to install the solution into the production environment, as illustrated in Figure 7.