Developing software is hard. The process is difficult and there are lots of things that you need to keep in mind. Some of those things are things that you’d rather not deal with, like:
- Making sure that every developer on the team has the same essential libraries and applications on their machine, so that they can just work and everything works the same for everyone
- Providing a fresh dev machine to new developers, so that he can hit the ground running
- Making sure that everyone can work from everywhere
- Provisioning development and test environments that have all the right configuration to run the application
I’ve often seen companies buy loads of very expensive development laptops and install images on them with Windows, Visual Studio and so on. This is often a very expensive solution and makes developers dependent on operations.
Often, you’d need a particular piece of software that’s not included in the image. Usually, developers are local admins on the machines and can install that themselves, but not everybody does, and not everybody installs the exact same version. That can cause trouble, so the right thing to do is to get the application embedded in the image. Often this takes time as it needs to go on the backlog of the IT operations organization.
Also, setting up a development and test environment can take lots of time. You’re restricted by the capabilities of IT operations and – as developers and testers – you’re not in control of the machines.
What you really want is self-service development and test environments. And you can: by using Azure DevTest Labs!
What is Azure DevTest Labs?
Azure DevTest Labs is a service that Microsoft Azure provides. This service provides functionality for managing environments that contain Azure Virtual Machines.
Azure DevTest Labs makes it easy to provide Virtual Machine Images that you can reuse within your team for development and testing.
It also enables you to manage costs by setting things like:
- Maximum number of VMs per lab and per user
- Allowed VM sizes
- VM auto-startup and auto-shutdown times
And it has loads of features that help you to quickly provision and de-provision your environment for development and test.
Here are some definitions that are used in the Azure DevTest service:
- VMs are based on images, that can come from the Azure Marketplace, or that you upload yourself (as VHD)
- VMs can contain artifacts. These can be things that need to be installed, but also things that need to happen
- When you create a VM, you can indicate that you want to add artifacts, like install Git and Slack, or create a website shortcut or download a file
- Artifacts are stored as scripts in a Git repository. Per default, they come from the Public Repo from Microsoft.
- You can add a Git repo as a source for artifacts and create your own, custom artifacts. You can use this to do things like automatically download the latest version of source code onto the VM
- When you create a VM, you choose the properties of the VM like the base image, the name, the size (pricing tier), the disk type, etc.. In Azure DevTest Labs, you can create formulas that allow you to create a VM quickly. A formula provides all of the properties pre-filled, so that you can create a VM with just a few clicks
- Azure DevTest labs enables you to set policies for the lab to manage costs and minimize waste. You can set things like: the number of VMs that each person can use, the allowed VM sizes, auto-shutdown and -startup times for VMs and more
Okay, that’s cool, but why should you - as a developer - use Azure DevTest Labs? Here are 4 reasons:
Reason #1 to use DevTest Labs: Self-service!
The main reason for a developer to use DevTest labs is that it provides self-service. You can create the VMs that you need, provision and de-provision them and have everything ready to develop and perform tests on.
You can do all of this yourself. No more waiting on IT operations. A well-configured Azure DevTest lab has policies set up by the Lab Manager (maybe somebody from IT operations) and enables developers and testers to set up an environment in a very short time without worrying about costs or security.
This looks like a shortcut to work around IT operations. But it should be a new way of working for both IT operations and developers and testers.
Reason #2 to use DevTest Labs: Artifacts
Artifacts can be added to VMs and can help you a lot. Artifacts are customizable elements that can be used to deploy your latest bits or your dev tools onto a VM. They can be things that need to be installed, or things that need to happen. Per default, you can use the artifacts from Microsoft’s Public GitHub repository.
You can also create your own, custom artifacts. You do this by creating a JSON file in a certain format and have that point to a task (PowerShell, or other executable) that performs the action that you want. You need to store the JSON file in a Git repository that you attach to the DevTest Lab.
Why are artifacts so useful? Because they enable you to create a VM that is perfectly configured, without the need to manually install things and perform actions like getting the latest source code. You can immediately start developing when you turn on the VM.
Reason #3 to use DevTest Labs: Test environment automation
To aid with continuous delivery and automate things as much as possible, you can integrate Azure DevTest Labs in your favorite Build / Release tool.
For instance, in Visual Studio Team Services, you can use the DevTest Labs tasks in builds and releases.
Using these, you can easily create a custom VM for testing, containing your latest build, run some tests on it and delete the VM.
Provisioning VMs is pretty fast – not superfast. In my experience, it usually takes between 5 and 10 minutes before a VM is properly started. Keep that in mind when you create an automated test process.
Reason #4 to use DevTest Labs: Get rid of your dev machine
Using Azure DevTest Labs, you can easily create a range of VMs that you use just for software development. To me, this a very attractive idea: you can do whatever you want with the VM and just retire it when it gets ‘dirty’ (you know: when you messed around with it too much). And voila: you can have a fresh, new machine in 10 minutes or so.
VMs in the cloud can be very fast – you don’t have to worry about having a slow machine. You need to find the right VM size for you, that is fast enough and has all the bits that you need. This will probably save you costs over using dedicated, fast and expensive dev machines. The VMs can be shut down at the end of the day, thereby stopping the VM from costing money (almost completely). You can’t save costs like that with actual hardware that you bought.
Moreover: when a new dev starts, you just spin up a new VM from a formula and 10 minutes later he can get cracking!
Azure DevTest Lab is very useful for developers and testers. IT operations can use it to enable a self-service environment where developers and testers can create their own environment quickly, with minimal restrictions, whilst being cost-effective. It can even be used to automate test processes.
This removes a lot of friction in the overall software development process. Look into it!
Let me know what you think in the comments.