Sergey Nivens - Fotolia
Evaluate Spinnaker vs. Jenkins for CI/CD
Jenkins is one of the most popular CI/CD tools available, but Spinnaker enables IT teams to manage complex pipelines. Is one better than the other, or should 'vs.' be swapped with 'and'?
CI/CD tools like Jenkins and Spinnaker add value to application delivery pipelines. And while they share some functionality, they also have plenty of differences.
Before diving into each tool and how they compare, it is important to grasp the various stages involved in delivering an application. Below are some of the practices that organizations employ to build and deploy applications.
Continuous integration, or CI, commonly refers to a developer practice of merging code changes often, wherein each merge or change triggers an automated set of tasks to build and test, and then makes a deployable artifact. CI's emphasis is to create a valid deployable artifact.
Continuous delivery, abbreviated CD, builds on top of CI: IT operations takes the above deployable artifact and creates a process to release that artifact into production, depending on their organization's release cadence and the process around the release -- usually manual approvals before to-production deployment.
Continuous deployment -- another CD -- is a step up from the continuous delivery stage in which organizations trust their release process and deploy changes -- passing the requirements -- without any stops for manual approval. This automation makes the process of deploying changes routine and boring.
Author's note: For the rest of the article, the acronym CD refers to continuous delivery.
In order to really compare Spinnaker vs. Jenkins, let's first explore the features of each, starting with Jenkins.
Evaluate Jenkins
Jenkins is an open source automation server, created by Sun Microsystems in 2004 under the name Hudson. It was originally built with a focus on CI but has evolved to include CD features.
Some of those CD features include pipeline as code; Blue Ocean, a graphical interface to visualize CD pipelines; and Jenkins X, which is a specialized version of Jenkins that targets Kubernetes CI/CD.
CloudBees provides enterprise support for Jenkins, but the tool has a strong user community, consisting of dozens of organizations and projects. It also benefits from a strong, community-driven governance model.
Here's a closer look at of some of Jenkins' features and functionality:
CI/CD. Jenkins is a highly extensible automation server that can act as the continuous delivery hub for any project -- or it can be used as a simple CI server. Jenkins integrates with a variety of tools, but can also run independently for all CI/CD needs.
Installation. A self-contained, Java-based program -- contained in a WAR file -- Jenkins is ready to run out of the box, with support for Windows and MacOS, as well as other Unix-like OSes. It can also be run as a container.
Pipeline as code. This feature was added in the Jenkins 2.0 release. Users author Jenkins-based pipeline as code using a domain-specific language based on Groovy. The code is then stored in a version control repository. This feature enables teams to practice infrastructure as code. The Pipeline Stage View plugin enables data visualization.
Plugins. Jenkins integrates with many tools in the CI/CD toolchain via a vast ecosystem of plugins. This ecosystem is its greatest advantage: Because of Jenkins' maturity, many developers have created plugins for myriad use cases. The Jenkins documentation page offers an exhaustive list.
Automation and scripting support. Jenkins uses a REST API to automate and script mundane tasks. It also offers library wrappers over the REST API in Java, Ruby and Python.
Distributed and scalable. To drive builds, tests and deployments faster, Jenkins distributes workloads across multiple machines, regardless of whether they run on premises, in the cloud or in containers -- or any combination thereof.
Multiple use cases. Jenkins has an extensive list of use cases, from building apps for almost any code language to running automation jobs, for example.
Evaluate Spinnaker
Spinnaker is a free, open source CD software platform. Developed at Netflix originally, it's now backed by Google, Amazon and Microsoft, as well as other software companies.
Google Cloud offers it as a built-in integration. Armory and OpsMx are two providers for enterprise Spinnaker support. And, like Jenkins, Spinnaker is used broadly by an active community, which also plays a significant role in the tool's governance model and roadmap.
Spinnaker's features include:
Multi-cloud deployment support. Spinnaker deploys across multiple cloud platforms. It wraps up its own set of abstractions -- clusters, server groups and firewalls, for example -- to operate consistently across clouds.
Automated releases. Spinnaker creates pipelines that run both integration and systems tests. IT admins can also spin up and down server groups, as well as monitor rollouts. Use Git events, Jenkins, Travis CI, Docker or cron, or other Spinnaker pipelines, to trigger pipeline events.
Built-in deployment best practices. For faster rollouts, Spinnaker creates and deploys immutable images, which simplify rollbacks and eliminate hard-to-debug configuration drift issues. Pairing immutable infrastructure with the cloud yields stronger built-in deployment strategies, such as blue/green -- which Spinnaker calls red/black -- and canary deployments.
Third-party CI tool integration. Spinnaker works with Jenkins, Travis CI and many other CI tools. It can listen to events, collect artifacts and trigger pipelines through these CI tool integrations. Other trigger options include Git, cron or a new image container registry.
Integration with monitoring tools. Spinnaker integrates with a variety of monitoring tools, such as Datadog, Prometheus, New Relic and Google Cloud's operations suite. It also uses the exposed metrics for canary analysis.
CLI for setup and administration. Install, manage, update and configure the Spinnaker instance using the CLI tool Halyard.
Deployment strategies. Spinnaker comes pre-built with common deployment strategies, such as blue/green -- with a variant Spinnaker calls highlander, which destroys the version being disabled -- and canary in active development. IT admins can customize their own options if these generic ones don't suit their organization's needs.
Role-based access control. RBAC hooks into the internal authentication system to provide access to projects or accounts. Spinnaker supports an array of authentication options, such as OAuth, SAML, LDAP, Google Groups and GitHub Teams.
Manual approvals. Pipeline stages in Spinnaker can be configured to run after a manual approval -- a hard stop that is a requirement for organizations still maturing their CI/CD process.
Allowlisted execution windows. To ensure that deployments happen during specific hours, or to ensure that the right teams are available to monitor rollouts, IT admins can restrict the execution of pipeline stages to certain time frames.
Microservices architecture. Spinnaker's architecture consists of several different microservices. Deck provides the browser-based UI; Gate is the API gateway; Orca, which handles ad hoc operations and pipelines, is the orchestration engine. This architecture deploys well on Kubernetes because its microservices can scale independently.
Both Jenkins and Spinnaker are part of the Continuous Delivery Foundation, which rolls under the Linux Foundation and maintains a vendor neutral environment to enhance the tools.
Spinnaker vs. Jenkins: The comparison
Jenkins is, arguably, the most popular CI tool available. It has an extensive community and catalog of available plugins, integrating with a diverse array of systems. The Jenkins pipeline extends beyond CI into CD, but this functionality was more of an afterthought. Jenkins was never designed for cloud deployment, and thus necessitates external scripts to move the process forward.
Spinnaker, on the other hand, is a CD tool, which enables IT admins to manage CD pipelines with multiple deployment strategies and then roll back easily to previous versions.
Spinnaker was built with a focus on CD, and was never intended to be a build tool. Spinnaker takes advantage of existing CI tools -- such as Jenkins, CircleCI and AppVeyor, for example -- to start jobs, consume created artifacts, and to monitor release progress and the results. Consequently, Spinnaker improves flexibility in the deployment phase.
The pipeline feature in Spinnaker focuses on multi-cloud for CD, whereas the Jenkins pipeline feature focuses on CI. Spinnaker takes a piece of software that has been published -- whether a .deb or .rpm package, a docker image or a deployable JAR -- and runs it through a highly customized, predictable deployment cycle, which enables teams to deploy into multi-cloud ecosystems with much less tooling sprawl.
Because both tools have their areas of strength, often organizations adjust their scope from Spinnaker vs. Jenkins to Spinnaker and Jenkins. They use each in their respective domain: Jenkins to manage CI, and Spinnaker, which integrates seamlessly with Jenkins, for CD.
Teams can instill best practices for pipeline as code and an extensible and flexible system when they use the services in tandem. IT organizations can also pair Jenkins and Spinnaker to deploy applications to various clouds, and to set up deployment strategies without any additional intervention.
This improves teams' productivity. They don't have to maintain an array of diverse scripts to manage deployments to multiple cloud providers. Instead, they build on top of the existing plugins available -- rather than reinvent the wheel each time -- and focus on other deliverables.