The ability for a team to #deploy a properly tested and #versioned software system on their internal or #cloud-based infrastructure is a good indication of the maturity of a team. Any #manual step in that process (with the exception of manually triggering a #deploymentpipeline) is a potential liability and must be automated. People make mistakes, regardless of how meticulous they are. It's a fact of life.

On the other hand, a well-designed deployment pipeline takes care of compiling the...

...source code, invoking any #codeanalysis tools, running the #automatedtests, versioning the deployment artifacts, #provisioning the #infrastructure, updating the database schema, deploying to a staging slot and then, after proven healthy, swaps it with the production slot. All without having to share production passwords to developers, and without anybody connecting to the production environment and manually running scripts and other command-lines. And if your manager...
...doesn't see the value, I'm pretty sure an audit related to the many security standards we have these days (ISO 27001, NIS, etc.) will help convince them.

What's a technique, tool or practice that has made automatic deployments easier or more painful for you?