Deploying your ARM templates via PowerShell

You might have noticed I've been doing quite a bit of stuff with ARM templates as of late. ARM templates are THE way to go if you want to deploy your Azure environment in a professional and repeatable fashion.Most of the time these templates get deployed in your Release pipeline to the Test, Acceptance or Production environment. Of course, I've set this up for all of my professional projects along with my side projects. The thing is, when using the Hosted VS2017 build agent, it can take a while to complete both the Build and Release job via VSTS Azure DevOps.

Being a reformed SharePoint developer, I'm quite used to waiting on the job. However, waiting all night to check if you didn't create a booboo inside your ARM template is something which became quite boring, quite fast.So what else can you do? Well, you can do some PowerShell!The Azure PowerShell cmdlets offer quite a lot of useful commands in order to manage your Azure environment.One of them is called [New-AzureRmResourceGroupDeployment]( According to the documentation, this command will “Adds an Azure deployment to a resource group.”. Exactly what I want to do, most of the time.So, how to call it? Well, you only have to specify the name of your deployment, which resource group you want to deploy to and of course the ARM template itself, along with the parameters file.

	-Name LocalDeployment01
	-ResourceGroupName my-resource-group
	-TemplateFile C:\path\to\my\template\myTemplate.json
	-TemplateParameterFile C:\path\to\my\template\myParameterFile.test.json

This script works for deployments which you are doing locally. If your template is located somewhere on the web, use the parameters TemplateParameterUri and TemplateUri.Keep in mind though, if there's a parameter in the template with the same name as a named parameter of this command, you have to specify this manually after executing the cmdlet. In my case, I had to specify the value of the resourcegroup parameter in my template manually.

cmdlet New-AzureRmResourceGroupDeployment at command pipeline position 1
Supply values for the following parameters:
(Type !? for Help.)
resourcegroupFromTemplate: my-resource-group

As you can see, this name gets postfixed with FromTemplate to make it clearer.

When you're done, don't forget to run the [Remove-AzureRmDeployment]( a couple of times in order to remove all of your manual test deployments.


comments powered by Disqus