The What and How of Software Deployment Pipelines
Aug 19, 2021
Every software team needs to deploy software. It's a pretty important part of the software development life cycle! If your users can't get access to the new software you write, they can't very well use it, can they?
For a long time, deploying new software meant manually transferring new code onto running servers, all while updating required software packages and configuration files by hand. While bespoke code deployment is still an option for most teams, it's a pretty inefficient way to roll out new code. This is why teams from every size organization choose to develop automated deployment pipelines.
If you're thinking about developing an automated deployment pipeline, you've come to the right place. We're going to talk about what you need and how those pieces work together. By the end of the post, you'll have a good start on planning your deployment pipeline.
What Do I Need for a Deployment Pipeline?
Before we get started, it's important to understand that no two deployment pipelines are the same. Every company's needs are unique. Often, the teams within that company have unique needs, too. So if you see something in this post that doesn't apply to you, don't be afraid to throw it out. We're focusing on best practices here, not laying down hard rules.
With that out of the way, what are the best practices for developing a new deployment pipeline?
Best Practice 1: A Good Understanding of Your Environment
Remember that stuff I just said about tossing out things that don't apply to you? That doesn't apply to this point. If you want to build an automated pipeline for deploying your software, you need to know what software you have.
This is a place where a lot of teams try to cut corners. "Oh, we have a web server and a load balancer and a database and maybe a couple of microservices." That's not what I mean when I say you need to understand your environment.
You don't need to know that you have a database server. You need to know what version of database software that server is running, down to the release number. That includes things like optional patches you might have deployed. You need that level of detail for every single piece of software in your environment.
One of the benefits of adopting an automated software deployment model is that your builds are repeatable. Every time you run the build process with the same inputs, you get the same output. In order to benefit from that kind of stability, you need to know what your inputs are.
Best Practice 2: An Automated Build System
This is the part of the system that most people think of when they think of deployment pipelines. They imagine something like CircleCI or Jenkins chugging along to build and automatically deploy code.
Don't get me wrong: that's an important part of the process. But if it's the only part of the process, you're likely to wind up with more headaches than sunny days from your deployment pipeline.
Remember that your goal isn't just to automatically build your software. If that's all you needed to do, you could simply write a couple of command-line scripts. No, your goal with a deployment pipeline is confidence that the code your team writes is ready to go to customers. For that, you need a system that's fully integrated every step of the way.
Regardless of that integration, an automated build system is a necessity. There are many options, and it makes sense to research at least a few of the big players before you make your decision.
Best Practice 3: Strong Automated Tests
This is another place where a lot of teams try to cut corners. They rightly determine that you don't absolutely need tests to deliver software to customers. And writing software tests, especially good ones, is time-consuming. So tests become something that you'll always work on "when we have time."
The reality is that time rarely comes. Automated tests become neglected within the code base.
But the best software teams don't avoid writing tests. Strong automated tests provide confidence to the team that when they ship new code to customers, the changes they made didn't break any existing functionality. Investing time in writing good tests pays back in multiples with time avoided debugging the bugs that affect customers.
Best Practice 4: Isolated Containers
This is one of those places where things start to get a little squishier.
It isn't strictly necessary to adopt a container architecture like Docker for an automated deployment pipeline. But as mentioned before, one of the goals of automated deployment is builds that always come out the same, assuming they have the same inputs. Containers help to promote that goal by making the environment the code runs on defined as part of that code as well.
Best Practice 5: Container Orchestration
This is another one of those pieces that isn't strictly necessary, but it helps out an awful lot.
Another benefit of adopting a container approach to your apps is that it's easy to scale individual parts of your application without devoting more resources than necessary to other parts. For example, you might only need one load balancer, but you might want four web servers running your application.
You can set those kinds of limits manually. But that means if you have an event where suddenly your load increases tenfold, you're on the hook for figuring out when and how to add more servers. A container orchestration system like Kubernetes takes a lot of the guesswork out of those events.
Best Practice 6: A Cloud Computing Platform
Again, if we're being totally strict here, you don't need to jump onto a cloud compute platform like AWS or GCP. You can automatically deploy software straight to bare metal on hardware you physically maintain. If that's your use case, you can still adopt an automated deployment pipeline.
But for most companies, cloud platforms come with a lot of benefits. They provide the ability to quickly provision new hardware. All major cloud platforms give you the choice of where to locate your servers, and they offer the option of creating multi-region fallbacks should something fail. They also integrate directly and quickly with existing automated build systems. This makes your journey to adopting an automated deployment pipeline much smoother.
Best Practice 7: Somewhere to Keep Track of It All
As you might expect, when all this is up and running, it's a lot. There are piles of moving parts to keep track of and organize. And if your team is busy, there are probably a dozen builds or more running at the same time.
That's why Plutora specializes in deployment management. We make managing this type of work simpler, faster, and far less painful. By managing all the pieces of your deployment pipeline in one place, we make it easy for executives and ops teams to understand how the pipeline is working and squash problems before they start.
Automated Deployment Pipelines Are Worth the Trouble
If you're at the start of your automated pipeline journey, this can all seem bewildering. That's especially likely if you're working with an established team that's already busy enough trying to manage your existing manual deployment pipeline.
But figuring out how to automate your deployment pipelines is absolutely worth the trouble. It'll save your team hundreds of hours of deployment headaches every quarter. And the code you do ship will be safer and more stable.
The first steps are the hardest. It really does get easier, and thousands of software teams have overcome the same initial problems before. Your team can, too.
If you're interested in getting started with automated deployment pipelines, we have some great resources on adopting a DevOps culture no matter the size of your team.
And if you're interested in how Plutora can help your deployment pipeline thrive, we'd love to help talk you through it!
Download our free eBook
Mastering Software Delivery with Value Stream Management
Discover how to optimize your software delivery with our comprehensive eBook on Value Stream Management (VSM). Learn how top organizations streamline pipelines, enhance quality, and accelerate delivery.