Tips for Deploying your .Net project

Over the last 20 years I’ve seen many a deployment, some good, some bad and the ugly, life’s too short for manual/long deployments.

Here is what I recommend

If you have manual steps in your deployments then stop it, now, no seriously, you can deploy with zero manual steps (clicking deploy doesn’t count).

What to do instead

Get yourself TeamCity, yes TeamCity, Jenkins is ok but you get what you pay for, trust me Jenkins isn’t TeamCity. Ok now that you have an excellent build server, you’ll want to script your builds, for this I liked using psake along with PowerShell, honestly people who don’t know PowerShell are missing out, its awesome.

So get your scripts together and kick the builds off from TeamCity using psake.

Unit Test your PowerShell Scripts

Using Pester you can unit test your PowerShell scripts, thus realising that their fragile or poorly written or just large function which are hard to test, well do yourself a favour and use pester to unit test them.
Pester also gives you code coverage for your PowerShell scripts

Deploy your app

To deploy any .Net app use Octopus Deploy, its easy, its painless, it deploys with error handling, rollback using transactions, and you can do blue/green deployments, if you want to deploy a previous release, one click, deploy to multiple environments, any previous version etc. all in one click.

To summarise, no more manual steps, no copying files, manually unzipping files, creating folders etc, – no need to do that, and leads to human error, highly recommend each of those tools.

My todo list for work in 2016

Its 2016 and I like to make a list of things I wanna look into and put into place at work so here is a list of things I am aiming to do which also includes at my job in 2016:-

  • A blog post each week, last year I only managed 11 blog posts and that’s poor, so more blog posts will come in 2016.
  • Lightning Talks, we have started doing these at work and this year I plan to do a few of them if given the chance, I’m doing one on the 6th of January on as Developers Top 10 Best Practices which I will share about once I have done my talk.
  • Test 3rd party end points, have a dashboard page which tells us what is up and what is down, going to try to use the Chrome add-on called Postman and use collections within Postman to do this.
  • Database Deployments, currently we manually script everything and then get the dba to run the scripts in manually, we need to script the database and put it into Source control each release as a starting point, I’m looking forward to this as it well help aid with our deployments and speed them up. Hoping to get the RedGate Sql Toolbelt into the company so we can use this to help us achieve this.
  • Red/Green deployments, we currently deploy at weekends and this can and should change so that we aren’t spending time at weekends doing releases which take quite a lot of time, we can automate them more and this year I plan to fix that.
  • More Testing, we are closing in on unit testing our PowerShell scripts, this will be another nice addition to the number of different areas which we are currently testing which is great.
  • Code Reviews, need to figure out a way that keeps everyone from being bored, brings benefit to the team and keeps us developers on our toes going forward.
  • Continuous Improvement, test more, more in-depth code reviews, automate more, release finished work, tackle the back log each sprint.

That’s it for now, I will add to this lost throughout the year as we go, i will keep an eye on this post and how we get on and blog about each one individually, hopefully I’ll get the chance to work on some if not all of these this year.

Feel free to follow me on twitter at @gsuttie

Learning PowerShell – Using PowerShell Community Extensions

ps The PowerShell Community Extensions are a set of additional cmdlets, providers, functions and scripts which the community asked for and have been written for us to use and take advantage of.

Once you download PSCX you’ll want to add this module to something called your PowerShell Module path, this is the place you’d normally put your PowerShell Modules so that you can import them for using in your scripts. To check what your PowerShell Module path is from within PowerShell type:-


Add PSCX to your $env:PSModulePath so you can import it and use it anytime you start using PowerShell, to add PSCX type the following:-

$env:PSModulePath = $env:PSModulePath + “;C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\;”

the last part should be where you chose to install PSCX.

Ok so no we have this added to our PowerShell Module path lets see if we can start using it.

To check what PowerShell modules are already imported type:-


The screen shot below shows me which modules have been imported:-


To add PSCX you need to import the module, so lets do that by typing:-

Import-Module PSCX

And that’s it we can call any of the PSCX cmdlets from our scripts, the list of which are extensive and include:-


and many more

Hopefully this is enough to whet your appetite.

Learn PowerShell – Piping

Piping in PowerShell is awesomesauce and best explained by some examples, but firstly a quick explanation of piping, lets say we want to get a list of files from the c:\windows folder on your machine, order them by the last modified date and select the first 50 files and output the list to a text file in the current folder, simple requirements and here it is:-

Set-Location c:\windows
Get-ChildItem | Sort-Object LastWriteTime -Descending | Select-Object -First 50| Out-File files.txt

  • Set-Location is the cmdlet which is roughly the equivalent to the cd command found in a command prompt.
  • Get-ChiLdItem is the cmdlet which is roughly the equivalent to the dir command found in a command prompt, but you can use it with objects, lists and so on.
  • Sort-Object is the cmdlet to sort obviously and can be used against your objects, lists and much more.
  • Select-Object tis the cmdlet to select a number of objects (files, records, results), you can use this with -first, -last, -skip and much more
  • Out-File will is the cmdlet to simply write output to a file.

Obviously a very simple example but you take A pass the results to B, B then does work on it, passes it to C and you got the idea. This is a how piping works and can yield the data your looking for quickly and in very little code indeed.

PowerShell Blog Posts

Learn Powershell – ExecutionPolicy

psCheck what the script execution policy is currently set to on your system:-


The options are AllSigned, ByPass, Default, Remote Signed, Restricted or undefined

You can read about each of these by typing in the following command:-

Get-Help Set-ExecutionPolicy -online

This will load the online help for this command, if your ever needing help with PowerShell then you can search for help like so, Get-Help *services*, this will show you what commandLet’s are available for working with Services, i.e. starting them stopping them and so on.

I set the execution policy to RemoteSigned so that I can run my own PowerShell scripts but ones I download from the internet wont run unless I change the setting, so that my system is secure from any unwanted side effects from other peoples scripts.

PowerShell Blog Posts

PowerShell useful Tools


As part of my blog post series on learning PowerShell I thought it might be a good time to list the tools I have came across and give them a shout out as I reckon the list of tools have been very helpful in learning some good practices when writing PowerShell scripts.

Lets get to the list:-

  • PowerShell ISE Steroids – this is a great add-on for PowerShell ISE, its not free but you get 10 days to check it out and I recommend you do.
  • PowerShell Script Browser Script Browser for Windows PowerShell ISE enables you to search for script samples in the TechNet Script Center, invaluable tool in my opinion for looking at example scripts
  • Power GUI PowerShell Editor with a few nice extras

I will add more as I come across them 😉

Learn PowerShell – Getting Started


To Start PowerShell, click Start, and type in PowerShell, choose Windows PowerShell ISE and run this as an Administrator (right click).

Tip:-  To check which version of PowerShell you have type $PSVersionTable, this will show a table of results and your looking for the top one which is the PSVersion, if this is 2.0 then you really should update before we go any further. At work I have been using PowerShell 3.0 and now 4.0 is out.

To update to version 3.0 the download link is PowerShell 3
To update to version 4.0 the download link is PowerShell 4

Tip:- PowerShell has in-built help which is really great, make sure its up to date by typing in Update-Help

PowerShell Blog Posts