Nearly two decades after the turn of the millennium, software has an impact on nearly all aspects of our lives. We use apps for learning, finding love, commerce, entertainment, and pretty much every other part of how we go about the world. Driving this steady stream of software is the DevOps pipeline of the modern DevOps software development environment that blends the power of automation and cross-team collaboration for a faster and smoother path to the constant release of hot off the presses versions of our favorite applications.
Despite the success of DevOps in reaching the mainstream lingo in the software industry, the details of its process, including the continuous integration (CI) and continuous delivery/continuous deployment (CD) pipeline are often not well defined.
In hopes of closing this gap, we’ve decided to break down the basic elements of the DevOps pipeline, explaining the technologies and concepts powering it, and lay out some of the top tools that software development professionals depend on for pushing their products through their DevOps pipeline.
Defining the DevOps Pipeline
The DevOps methodology has risen to become the standard development practice in recent years, helping organizations push out higher quality software faster. The principle behind the DevOps pipeline can be summed up as write code, run it through the wringer of testing, get feedback, fix what isn’t working, push it out for deployment, monitor it in the wild, and repeat.
If this sounds like your standard operating procedure for software development, then you’re right with one significant exception: shifting left.
The DevOps model is based on the idea of test early and often, pushing code and testing on short cycles to receive actionable feedback that allows developers to fix issues early before they become harder to solve and repair at a later stage. This means that organizations can avoid nasty surprises before a release, hopefully shortening their overall deployment schedule.
Navigating the CI/CD Pipeline
Looking at the DevOps lifecycle that runs throughout the pipeline, we can break it down into different sections and concepts (see diagrams below).
When the developer finishes writing their code in the IDE (think IntelliJ IDEA, VS, Eclipse), they commit it to a version control system like a GitHub repository that will help avoid future confusion and set the ground for pushing the code through the DevOps pipeline.
At this point, the committed code enters the CI/CD part of the DevOps pipeline, going through the build phase where it is again tagged by the versioning system before being sent on for its first round of testing. If you are working with a binary language like Java, then it is compiled at this stage. Continuous integration is important since it provides an automated process that allows teams to all incorporate their code and perhaps most importantly, test the pudding out of it.
As we mentioned above, testing early and often is a key tenet of the DevOps principles, giving developers the feedback that they need to make corrections in their code before bugs or vulnerabilities are hard-baked into the code.
We can see from our DevOps pipeline diagrams that feedback is being sent back at every stage of our DevOps pipeline. So not only are we getting feedback when we run our unit tests, but also during the build phase.
After we think that we’ve ironed out most of the issues, we send our code into a test or staging server for the deploy stage of the pipeline. So just in case we thought we got it to work as intended, our automated testing will help shake us of such silly notions and point out the errors of our ways.
Once we’re reasonably satisfied that our product is in good working order, we can send it on to the production server. At this stage and any one of the phases before it, we can receive notifications that an element of our code needs to be rejiggered and then sent through our DevOps pipeline again as many times as needed until we get it right.
Once on the production servers, the product is available for continuous delivery and deployment, making its way out to users upon demand. To ensure that the product functions as intended and to garner useful information for improvements, we continue to monitor the code, sending the feedback into our DevOps pipeline. It is this non-stop flow of action and feedback ( that gives DevOps its infinite visual representation.
Harnessing the Power of Automated CI/CD Tools
Hammering out all the kinks in your product as it bounces its way through the CI/CD can be a heavy lift for any development team if they have to manually perform all of the pushes and tests on their own.
Thankfully there has been a lot of innovation in building developer tools to help make this a much smoother process. Many of these CI/CD tools are fairly comprehensive and offer solutions that run through the entirety of the pipeline from the moment that the code is committed through to the production stage.
Automation is a basic feature of these tools, seeking to take as much of the busy work out of getting products through the DevOps pipeline, especially when it comes to testing.
In hopes of helping you get on your way to DevOps excellence, we’ve compiled a list of some of the top CI/CD tools that you should consider using for getting your quality code out faster.
No discussion of DevOps would be complete without mentioning Jenkins. An automation server, Jenkins gives users a powerful tool for building, testing, and then deploying their products. This open source tool has plug-ins galore to choose from, making it an easy fit for nearly any operation.
Since we’re all about promoting open source projects, it is only appropriate to bring up the common Jenkins integration Apache Maven into the mix. This software project management and comprehension tool can be used for building and managing any Java-based project.
With the backing of major players in the tech space like Microsoft, Redhat (now owned by IBM), and CloudBees just to name a few, Jenkins is a proud member of the open source community, and available for use free of charge.
This CI tool helps users take their code from the starting point to the finish line in a variety of environments. CircleCI allows developers to create Workflows for better control over their pipeline, along with useful VCS integrations, automated testing, and notifications for when a build fails.
With options for SaaS or self-hosted on-prem, CircleCI offers a powerful solution for automating your DevOps pipeline. They have also launched their Orbs feature with 3rd party service providers than simplify the process of integrating additional services such as monitoring of open source vulnerabilities.
Microsoft has gained significant ground in the development space over the past few years. Having already been dominant with their Visual Studio IDE, they have expanded their Azure platform into all aspects of development with the Azure DevOps family of services and products.
Offering support for a wide range of languages, native container support with Docker and Kubernetes, and a treasure chest of plug-ins, Azure Pipelines is a CI/CD powerhouse. Having bought GitHub in 2018, Microsoft has moved pretty quickly to make working between Azure and your GitHub repository fairly seamless. As a one-stop-shop, Microsoft has put together an impressive array of tools.
This popular CI service is built with GitHub users in mind. Beloved for making the testing of open source projects a cinch, Travis CI offers an easy way to create a pull request build flow. Written in Ruby, Travis CI is available as a SaaS service.
While they provide free services for working with open sourced projects, there is a fee-based option for using them for private projects if needed. If you primarily work within the GitHub environment, then this might be a good option to start off with.
Offering 100 build configurations, three build agents, and access to all product features for free, TeamCity is a favorite among many for their powerful CI tool kit. For those in need of some more juice with additional build agents and other support features, they can access a variety of paid packages that can meet a variety of scaling needs.
TeamCity is a part of the JetBrains family of development tools that include IntelliJ IDEA which is likely already quite familiar to most developers as one of the top three IDEs in the field.
Long known for their Git services, Bitbucket is fast gaining a reputation as a CD product that offers users powerful on-prem options for deploying their products.
Features such as their branch permissions provide admins with useful controls for ensuring that only the intended folks can make changes to your code. They have also recently introduced a Pipes, an easy new way to integrate 3rd party services into your Bitbucket environment, avoiding the normal hassles of tinkering around with an API configuration.
While most of the tools and services on our list have covered the CI part of the CI/CD pipeline, we knew that this list couldn’t be complete without naming one of the leaders on the CD side of the field.
CloudBees’s CD solution provides easy integrations with Kubernetes and Docker, provides security and governance controls, is available for SaaS or on-prem deployments, and has tools to help your team improve visibility over your product as it winds its way through the pipeline.
This DevOps platform provides users with the infrastructure and insights to move their products from the planning stages through to the hands of customers. They offer release orchestration and deployment automation tools that help make the process of moving new versions out the door in a way that sticks to the standards that your team sets in place, helping you to maintain control no matter what the scale.
One key advantage that they offer is their unified view of activity on the platform that gives all members of the team access to information for better decision making.
This tool has basically become synonymous with containers, the technology that has caught fire over the past few years for its ability to move software seamlessly from one testing environment to another, skating around most of the compatibility issues that we normally encounter.
With Docker, it is easy to spin up new, lightweight images or run them for testing. If you’re using Docker, then Google’s open source orchestration tool Kubernetes is also essential for managing your container usage.
Incorporating Security into our DevOps Pipeline
While the DevOps pipeline approach has been instrumental in helping teams to catch and fix bugs earlier in Software Development Lifecycle (SDLC), security was far too often left as a secondary consideration for the security team to handle.
However, in recent years, developers have begun taking on more responsibility for the security of our software. This means that developers need to step up their game in making sure that they follow secure coding practices and embrace the DevSecOps model that doesn’t put security at the end.
Similar to our DevOps model, in DevSecOps we are checking early and often at every stage of the DevOps pipeline that our product stands up to scrutiny. When vulnerabilities are found, our short feedback loops help us nip them in the bud, keeping these molehills from becoming mountains.
See You on the Other Side (of the DevOps Pipeline)
Hopefully, this breakdown of the DevOps pipeline has helped to turn a buzzword into a practical understanding that can provide you with a starting point for improving your team’s development. With the right tools in hand, and of course plenty of diligence to stay on top of fast flying feedback loops (as seen in the DevOps pipeline diagrams above), you and your team are in for a wild ride. Good luck and hold on tight.