Click here to Skip to main content
Email Password   helpLost your password?

Introduction

RemoteInstall is a pragmatic approach to testing, and has been extremely successful at my day job. We went through several test framework iterations, and just couldn't get any automation going. We tried expensive systems and Open-Source stuff. We spent cash. We made automation a priority. It continued being a dead end.

In the meantime, we were authoring MSI installers like crazy. We had to deal with a large distributed system that was having a high deployment failure rate, a system made of many components. We had hundreds of upgrade paths, and it was clear that we needed to automate it. Seeing company automation efforts deadlocked, I decided that instead of trying yet another expensive test system, I'll have an intern write a simple tool that can leverage VMWare Infrastructure.

Background

At its inception, RemoteInstall does this:

for each virtual machine {
 for each snapshot {
  restore the snapshot
  install the software
  report success or failure
 }
}

Simple enough? You can get this behavior out of the box with a simple config file. Here's what the output looks like in CruiseControl. This tests an application for clean install and upgrades from various known snapshots.

The results were superb. We have virtually zero deployment failure in production for thousands of customers.

Then, eventually, we got pretty good at this, adding lots of useful features. If you have more than one VM, you can do this in parallel. RI integrates with build automation. It can pickup your latest installers from network shares etc.

Next, we thought: why not run some tests after each successful installation? So we added tasks and some simple integration. So you can execute JUnit or NUnit tests on the remote machine post-installation.

NUnitSample.jpg

This made it into a full blown test framework. We now author tests in C# and Java and remote them via RI to run against multiple configurations.

Implementation

The latest C# source code can be found in Subversion: https://remoteinstall.svn.codeplex.com/svn. Here're some interesting aspects of the code to get you started.

The RemoteInstall library is a modular approach that uses declarative syntax in the configuration files to drive execution.

VMWareTasks is used to control VMWare virtual machines and snapshots.

RemoteInstaller is a command-line tool that uses the RemoteInstall library to drive execution.

Using the code

Download the latest version of RemoteInstall from CodePlex. Open the help file and follow the Getting Started guide.

History

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
Generaltwo questions [modified]
tottawang
22:53 20 Dec '09  
#1
is that supported to dispatch install task to vmware snapshots located in mutli-client machines?

#2
guess it is related to cruisecontrol.net.. so is that capable of running install with automatic notification of new installer built successfully & posted to file server?

modified on Monday, December 21, 2009 4:00 AM

GeneralRe: two questions
dB.
21:37 29 Dec '09  
#1: I am not sure what that means. If you mean dispatching install tasks to multiple virtual machines, then yes.

#2: Yes, that's how we use the tool. See the CHM documentation, it has a page on CruiseControl integration.

Please post future questions on CodePlex: http://remoteinstall.codeplex.com

Thx
dB.



Last Updated 24 Nov 2009 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2010