Continuous Delivery, by Jez Humble and David Farley, is subtitled : `Reliable Software Releases through Build, Test and Deployment Automation'. And indeed, all of this can and should be automated!
The authors describe everything you should know about why and how to automate software releases, from the commit to the deployment on live production servers. I already knew about Continuous Integration when I started reading this book, so I didn't learn much about this topic. But if you are not already familiar with this concept, just stop now, get the book, and read the first three chapters! That's the absolute minimum you should do! And that's enough to highly recommend it.
The book is geared toward building applications that get released on the company's servers, rather than shipped to customers. This is very different from the project I'm currently working on, for which we essentially deliver libraries that customers will include in their own applications. But most of the content of the book is still completely relevant: it doesn't really matter whether you deploy or ship: you should still release often!
Chapter 11 is entirely devoted to 'Managing Infrastructure and Environments'... Did you know that you can store your test servers' configuration under source control? That you can turn bare metal into a running server configured for your application completely automatically, and thus reliably? That is something I want to implement!
Chapter 14 deals with 'Advanced Version Control'. As the authors put it, "poor version control practices are one of the most common barriers to fast, low-risk releases". VCS technologies are discussed and compared (centralized, distributed, stream-based), as well as branching patterns (develop on mainline, branch for release, branch by team, and branch by feature). Very important, and very interesting.
This book is definitely a must-read for anyone responsible for delivering software!...