“What’s in a name?” wrote the greatest Bard who ever lived.
All I can say is, he lived in simpler times, when DevOps and the confusing world of continuous integration (CI), continuous deployment (CD), CI/CD, the other CD, application release automation (ARA), pipelines, assembly lines, etc., didn’t exist.
The biggest challenge today is that vendors use overloaded terms to describe completely different use cases. CI vendors claim to support CI/CD, even though the “D” here is just a deployment to a development environment and not staging or production. ARA vendors claim to enable continuous delivery, even though they do not include critical steps such as infrastructure provisioning, security patches or configuration management.
The terms “pipelines” and “assembly lines” are relatively new. Multiple vendors have recently announced pipelines and assembly lines, and the differences aren’t obvious at first glance. So let’s do a deep dive.
What are CI Pipelines?
Continuous integration has evolved tremendously over the last few years. What started as a simple process of automating build and unit tests for each code change has evolved into a pretty complex workflow.
As an example, look at the different CI workflows shown below:
In classic CI, all build and test instructions were included in a single blob and instructions were executed serially. If all instructions executed successfully, CI was successful, and if anything failed, then it was marked failed. Almost all CI providers, until recently, offered just classic CI.
However, as CI became mainstream, developers wanted to define more complex workflows with decision trees and parallelism. CI pipelines support this complexity, such as:
- Defining the CI workflow in stages, so you can get results from a stage faster without having to wait for the entire workflow to finish. This also enables scenarios such as running a basic test group and only running the extended test suite if the basic tests pass.
- Running stages in parallel, so you can split tests or test your code against different environments or language versions, and get faster feedback.
- Forking your CI logic based on the results of a stage.
While CI pipelines are a huge improvement over classic CI, they are still limited to developer-focused workflows. Jenkins, Teamcity, Shippable, Gitlab and CircleCI all support some form of CI pipelines.
What are DevOps Assembly Lines?
DevOps assembly lines are focused on automating and connecting activities performed by several teams, such as CI for devs, infrastructure provisioning and configuration management for ops, test automation for test, security patching for SecOps, semantic versioning and approval gates for release managers, deployments for multiple environments, and so on.
Today, most organizations use various tools for automating specific DevOps activities. However, the DevOps toolchain is fragmented and gluing it together to achieve continuous delivery is a challenging task.
Most teams adopt one of the following approaches:
- Using cultural collaboration as the glue between silos. As an example, when a new application version is available, the test team creates a JIRA ticket and assigns to ops. Ops then copies the application version information into their deployment scripts and run them.
- Writing ad-hoc scripts to trigger one activity from another, including passing state information through intermediate storage such as S3. In this case, the DevOps engineer would likely write a Jenkins job that runs automated tests, and then pushes application version information to S3. Another Jenkins job polls the S3 bucket, and when a change is detected, runs the deployment scripts.
The first approach introduces inefficiency and unnecessary human-dependent steps. The second approach is better, but only works well for small teams working on a single application. It creates a Frankenstein of spaghetti automation when you have many applications or even a single application with microservices.
DevOps assembly lines address this problem by focusing on gluing together these various DevOps activities into streamlined, event-driven workflows with the ability to easily share state and other information across activities.
The following image shows a typical assembly line for a single application or service:
See the difference? The CI pipeline is just ONE activity in the assembly line. Each of the boxes in the picture above is a pipeline, just for different activities! Each has specific needs with respect to tools integration, runtime, configuration, notifications, etc. In addition, each pipeline is owned by a different team, yet needs to interact with other pipelines and exchange information. For example, if the ops team changes provisioning scripts for staging environment, the test team needs to redeploy the application and run performance tests.
A DevOps assembly line is, therefore, a “pipeline of pipelines.”
DevOps assembly lines need to support the following:
- Ability to easily define workflows across multiple pipelines.
- Versioned and reusable workflows, enabling rapid changes and scaling for multiple applications and/or microservices.
- Integrations with all popular source control systems, clouds, artifact repositories, DevOps tools, languages, services, etc.
- Runtime to execute every pipeline, including pre-installed tools and CLIs, and the ability to use the right runtime, depending on pipeline type.
- Accelerators/playbooks for common pipelines and tools.
- Ability to pass state and other information while triggering dependent pipelines.
- Automatic triggers or manual approval gates between each pipeline.
- Configurable notifications for each stage of every pipeline.
- Release automation features such as semantic versioning of packages.
- Audit trails for each pipeline, with the ability to go back or forward to a specific state.
- Abstraction of all sensitive information like passwords, tokens, keys, etc. for security reasons.
- Roles and permissions restricting assembly line and pipeline actions.
- Manage DevOps infrastructure, including spinning VMs and containers up and down as required.
- Visibility into each pipeline and stage, including logs, status and versioned data.
- Metrics and Analytics across pipelines to help identify bottlenecks.
In short, DevOps assembly lines help automate and scale end-to-end workflows across all teams and tools, enabling continuous delivery.
About the Author / Manisha Sahasrabudh
Manisha Sahasrabudhe is co-founder and vice president of product management at Shippable. Prior to Shippable, Sahasrabudhe was senior program manager at Microsoft. She can be found online at Linkedin.