In this series of posts, I'll be walking through how to create a deployment pipeline using MSDeploy and the Web Publishing Pipeline.

What is a Deployment Pipeline?

A Deployment Pipeline is one of the tenants of Continuous Delivery, the practice of always being able to release new software (but not necessarily actually doing it). In a Deployment Pipeline, a single package is created at the end of the build/test job and deployed to each environment, (possibly) all the way up into production. And then we start again for the next release.

It's important that the package be the same so that the "thing you deploy is the thing you tested".

If you'd like you learn more, Jez Humble and David Farley quite literally wrote the book on Continuous Delivery, which I cannot recommend enough.

Series Goals

This series aims for a deployment pipeline the following attributes:

  • Code is only retrieved from source control once
  • Code is only compiled once
  • Deployment operations are performed by non-administrator users
  • Deployment user credentials are not stored in source control or CI configuration
  • Per-environment configuration can be stored in the solution or supplied at runtime


Due to the complexity of deploying database, I've decided to leave them out of this series. However, since it's an important topic you can be sure it will be brought up in a future article.