Build and upgrade an automated software delivery pipeline that supports containerization, integration testing, semantic versioning, automated deployment, and more.
In Shipping Go you will learn how
Shipping Go is a hands-on guide to shipping Go-based software. Author Joel Holmes shows you the easy way to set up development pipelines, fully illustrated with practical examples in the powerful Go language. You’ll put continuous delivery and continuous integration into action, and discover instantly useful guidance on automating your team’s build and reacting with agility to customer demands. Your new pipelines will ferry your projects through production and deployment, and also improve your testing, code quality, and production applications.
Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications.
About the Technology
An effective software delivery pipeline automates all stages, from initial design, through development, deployment, and ultimately the usage experience that feeds back into new features and releases. Go embraces the best practices of Continuous Delivery, and adds a few language-specific tools and twists of its own.
About the Book
Shipping Go shows you how to build Go-specific software development pipelines. You’ll have a basic CI/CD process up and running by the time you finish Chapter 3, along with an iterative process for designing, releasing, and revising your applications. Then, you’ll systematically upgrade your pipeline to support containerization, integration testing, semantic versioning, and automated deployment. A set of handy appendices help you translate these valuable practices to Kotlin, Python, and JavaScript applications.
What’s Inside
About the Reader
For Go developers.
About the Author
Joel Holmes builds cloud native applications, helping to architect, design, and develop them. A Golang tech lead, Aliénor Latour was the technical editor for this book.
Table of Contents
PART 1 - STARTUP 1 Delivering value 2 Introducing continuous integration 3 Introducing continuous testing 4 Introducing continuous deployment PART 2 - SCALING 5 Code quality enforcement 6 Testing frameworks, mocking, and dependencies 7 Containerized deployment PART 3 - GOING PUBLIC 8 Configuration management and stable releases 9 Integration testing 10 Advanced deployment 11 The loop
So, you might be a working programmer who came into the field before cloud computing and containerization was much of a thing. You can use Docker, images, cloud providers, and CI/CD pipelines well-enough because, hey, that's the way things are done these days. But, you might not think much about it, say because you focus on the domain and the jobs to be done, and are happy to use the tools to get you there. Likewise, you've noticed that patterns of dependency injection and testing help you express that domain (and check your understanding), but see these tools as intruments in expressin gthat domain. It's a similar story with linters and formatters, not having to worry about common mistakes or distracting arguments.
What this book does as frame all these surroundings as an organized whole, ordering the sequence of development practice as an expanding process of communication: for the individual in their design process, the team in organizing their contributions, the organization in communicating at interfaces and in shared infrastructure, and as part of a network of services and dependencies most broadly. It takes all of the above tooling and situates the automation they provide in analogy to efficiencies gained from manufacturing and shipping automation. It explores the intrinsic trade-off between early flexibility and later efficiency in common in organizing production processes.
This book is not actually, really, about Go at all. The examples are in Go, but there are appendixes for Kotlin, Python, and Javascript to show you how to adapt what's being shared to your environment. Don't mistake what I'm saying, you'll learn how to do all of the above in Go-based web backend development. However, it's decidedly not a Go tutorial, but a book of broader interest. It's actually probably the first Go book programmers should read, because they'll recognize so much of the surrounding context as to feel really oriented, instead of wondering what specific language features really add up to.
I really like this book. Also, I happen to know Joel, and he's a decent guy. This book probably doesn't get enough love because people will assume it's more about Go than it truly is. I'm going to give it five stars just to tip the average a little bit.
This is not to say that this is book hasn't made trade-offs. The strength of focus on some areas has left others unexplored. Given the scope of the book, it had to leave out metrics entirely. One can come out of it wondering if cloud computing hasn't truly been interrogated for the trade-offs it imposes.
I think there are other analogies with physical processes worth exploring, like the different kinds of impacts made by the overhead of automation, and whether those are good trade-offs for the kind of influence you are trying to make with your product. The interaction between the product and its surrounding implementation, and what kind of infrastructure is appropriate, is not something this book is prepared to tackle.
I think that's fine, even correct. The product developed in the book is deliberately very simple in order to give the clearest picture to what the automation around it is and what its advantages are. There is another story to be told about the complexity of application development: a complex application with complicated interactions and trade-offs. I hope Joel finds the opportunity to tell it.
Not much about writing idiomatic Go Code in this book. It's mainly about development practices and building and delivering Go Code. It is an okay book but there are better Go Books Out there
This is more about CI/CD practices in general using Go as an example than a deep examination of Go-specific deployment, but that aside it is a good introduction to modern deployment practices.