How often did you right-click in your solution and hit deploy? How often did your colleagues asked you what they have to do when deploying? Automate it! Simply as that. There are many wrong ways of "publishing":
- Copy & Paste your release folder
- Provided files by Mail/FTP
- Every Person follows their own release process
- Right-click > publish
All the above steps are right in the initial phase of a new project. Like first and second deployment. But as seen as it's in production or you have many developers working on the same project you should immediately stop this behavior!
You may think, why the heck should I do this? Here are some excellent reasons:
- Are you sure, you are using the latest Source Code?
- Did all Tests succeed? What about specific tests that pass on your machine but not in production?
- Was your last merge successful, have all commits been resolved?
- Are you following the defined release process?
Wouldn't it be nice always to have the same, standardized way of publishing and deploying? No more error-prone environment configurations like app settings or connection strings. Manual database setup, missing libraries, and so on. You can even roll back to a previous version if you found a critical flaw.
But what's the RoI? Let's do quick math. If every release costs you 15 minutes and every deployment to each tenant another 10 minutes. On the other side, it takes you 8 hours to set up your Continuous Integration and Continuous Delivery pipeline. How many releases until you recovered that time?
At least if you have one test target, you'll get that time back really quickly. Think about how long it takes to do all the required steps it takes (merge, compile, run tests, deploy to Q&A > Test > Production.
Can you use right-click publish to go to production? Sure, you can, but you shouldn't.
I'll cover CI/CD in the upcoming weeks. But here are some fundamental links:
- TeamCity: Great to set up a basic, automated Builds and Publish process
- Azure Pipelines: Alternative to TeamCity
- AppCenter: Build and deploy mobile apps with ease!
- Jenkins: An open-source automation server for build and deployment
- Octopus Deploy: Send your release to Q&A, staging, and production. Scheduled and automated!