Primary goal for setting virtual development environments on some Hyper-V server is to efficiently test the deliverables of software development project in complex configurations. Efficiently here means that such environment has to enhance software development process at low cost (in money, time and brain damage) and low-friction (seamlessly integrates with the existing processes).
Here’s my checklist for setting up and configuring Virtual development sever (as discussed in this post):
- Put at least 2GBs of RAM into your server (4GB+ in DualChannel mode is recommended)
- Optionally add hardware RAID configured for the speed (to be used for VM snapshots and VHD files)
- Install Windows Server 2008 64 bit and update it to the latest
- Setup Hyper-V role and configure virtual network (hook it to the real network adapter)
- Create base virtual machine images for your VM library:
- Set-up VM with enough RAM (i.e.: at least 512 MBs are recommended for Windows Server 2008) for the guest OS to work
- Install guest OS on VM (it is faster to capture ISO image, than use CD/DVD drive on the host machine)
- Install Virtual Machine additions
- Update VM to the latest
- Configure to use virtual network and check how VM picks up your DHCP
- Move the machine to the workgroup (if needed) and optionally configure network discovery
- Enable Remote Desktop connections
- Tweak firewall settings to enable File sharing and Remote desktop access
- Ensure, that VM is accessible via the RDP
- Install Mozilla Firefox! (you do not want to waste time in fighting the “enhanced Internet Explorer security” while configuring your virtual machines for the specific development roles).
- Stop the machine and move its image to the VM library (and mark the file as Read-Only, JIC)
- For every specific VM implementing development role:
- Create fresh virtual machine from the VM library
- Add (if needed) enough RAM to VM to support the development role (RTM for the minimal hardware requirements and double the RAM)
- Change the administrator password to a new one
- Install and update the software
- Save a snapshot
- If the VM represents constantly running development role (i.e.: integration server, SQL server etc), then configure it to start automatically
Common development VM roles that you might have (separation of concerns is applied here for the simplified management):
- Integration Server (especially for public projects)
- Database Server (if your application works via the ORM like NHibernate with multiple Database engines, you can cross-test stability and performance by running same integration tests against multiple connection strings)
- Web Server
- Distributed Application Servers (if you are developing .NET applications that distribute CPU load between different machines, these could be helpful here)
- Testing OS Snapshots for you software (one per each OS configuration being tested; especially if you are targeting .NET Mono-enabled operating systems like SUSE SLED)
The checklist could expand later on, since I’ve configured only a couple of development VM servers so far.
Latest Comments