Introducing BYO CI/CD (Bring Your Own CI/CD Pipeline)

Team
Nov 11, 2023
In the context of software development, Continuous Integration (CI), Continuous Delivery (CD), Continuous Deployment are integral concepts that streamline and enhance the software delivery pipeline.

Understanding: Continuous Integration (CI) vs Continuous Delivery (CD) vs Continuous Deployment

In the context of software development, Continuous Integration (CI), Continuous Delivery (CD), Continuous Deployment are integral concepts that streamline and enhance the software delivery pipeline. For developers, this amounts into cleaner code, quicker detection and resolution of issues, and a more fluid and efficient development cycle.

Continuous Integration (CI)

Continuous integration (CI) is the practice of automating the integration of code changes from multiple contributors into a single software project. Each check-in then being verified by an automated build and tests to identify integration errors early.

Some tests that might occur in this phase include:

  • Unit Tests: These are run for every piece of code to ensure that individual units of source code (like functions or methods) behave as expected. This is usually the first line of automated testing and is typically carried out by developers themselves.
  • Integration Tests: After unit tests confirm the functionality of individual components, integration tests check if these units work correctly when combined. These tests aim to expose faults in the interaction between integrated units.
  • Static Code Analysis: This involves analyzing the code without executing it, to find potential issues like code smells, programming errors, or formatting issues. It helps maintain a high level of code quality and adherence to coding standards.

Continuous Delivery (CD)

Continuous Delivery (CD), guarantees that the software remains in a release-ready state throughout the development process. CD significantly diminishes the lag time between the operations team implementing changes and those changes going live, facilitating a swift response to market dynamics and client requirements.

The tests in this stage are often more extensive and can include:

  • System Testing: This evaluates the system’s compliance with its specified requirements. It’s a high level test to validate the completeness of a system along with verifying that it meets the business requirements.
  • Acceptance Testing: It involves the conducting of tests to determine whether a system satisfies the acceptance criteria and to enable the customer to determine whether to accept the system or not. It’s the final phase of testing before moving the software application to the Market or Production environment.
  • Load and Performance Testing: These tests assess the behavior of the system under a specific load or verify the speed, scalability, and/or stability characteristics of the system.
  • Security Testing: This verifies that the system and the data it holds are not vulnerable to potential attackers and ensures that the software adheres to the security requirements.

Continuous Deployment (CD)

Continuous Deployment (CD) is an extension of Continuous Delivery. While Continuous Delivery ensures that the software can be released at any time, Continuous Deployment takes it a step further by automatically deploying every change that passes the testing phase. This is where the Bring Your Own (BYO) Continuous Integration (CI) feature of the Dome platform beautifully slots into this CI/CD landscape. Enabling users to keep their existing CI/CD pipeline, maintain control over their existing pipelines database scripts and toolchains, while getting an automatic deployment complete with the autoscaling.

You might be saying, this sounds great! But how does it work?

The Two Options: IaaS vs PaaS

The Dome’s Bring Your Own (BYO) Continuous Integration (CI) feature aims to offer an elegant solution to this challenge by bring together Infrastructure as a Service (IaaS) and Platform as a Service (PaaS).

Infrastructure as a Service (IaaS)

Infrastructure as a Service (IaaS), occupying one extreme of the complexity spectrum, is a versatile and infinitely customizable public cloud platform that has evolved into a staple for businesses worldwide. It is a digital behemoth akin to a public utility. Giants in this arena such as Amazon Web Services (AWS) and Google Cloud Platform (GCP) provide comprehensive solutions catering to every conceivable compute and application use case. Despite their complexity, engineering organizations overwhelmingly choose this path due to its flexibility and their ability to give DevOp teams control.

Platform as a Service (PaaS)

At the opposite end lies Platform as a Service (PaaS) - a paradigm that offers an array of automation tools to simplify and streamline application development process deployment automated testing. PaaS takes the daunting task of application deployment and test automation and boils it down to a single-click operation, making it a reality for a wide variety of application types. The caveat, however, is that this ease of use comes at the expense of customizability, an often critical aspect for businesses with unique or rapidly evolving needs.

Despite its limitations, PaaS is an attractive choice for smaller teams and startups. These entities often lack the resources to hire dedicated in-house DevOps engineers and are focused more on iterating product features rapidly rather than dealing with the intricate details of infrastructure management. PaaS enables these organizations to swiftly execute their development cycles, helping them keep pace with larger, more established organizations. However, as development teams at these companies grow and their needs become more complex, they often find themselves transitioning away from PaaS due to the scalability constraints and customizability limitations inherent in such platforms.

A Third Option: Dome’s BYO CICD

In a perfect world application engineers should be able to work in the environments they are familiar (such as a GitHub or GitLab repository) with and hand their code off to an external process that handles the responsibility of making it available to all their users around the world. PaaS makes this partially possible but with some unfortunate tradeoffs and often times it’s almost “too complete” of a solution for organizations with an already established release process and pipeline to adopt.

This is where the Dome’s BYO CI/CD feature fills a gap. It’s uniquely positioned in the middle of this complexity spectrum, perfectly balancing the ease of PaaS development and operations teams the customization flexibility of IaaS. BYO CI/CD achieves key benefits of this balance by leveraging key technological advancements that have been rapidly gaining popularity - containerization, automated scaling, and continuous delivery/

Containerization

Containerization, a lightweight form of virtualization, allows for the encapsulation of an application and its dependencies into a single, self-contained unit that can run uniformly across various operating systems and hardware configurations. This provides a significant boost to the quality code consistency and portability of applications, helping engineering software development and operations teams sidestep many of the common hurdles associated with varying runtime environments.

Once you’ve produced a docker image from your existing CI/CD pipeline, you push it to Dome and we deploy it at scale.

Autoscaling

Dome’s BYO CI/CD feature incorporates both automated vertical scaling manual horizontal scaling. This refers to the ability of a system to dynamically adjust its resources based on the application load or other predefined parameters.

  • Automated Vertical Scaling
  • When the load fluctuates greatly, automated vertical scaling is your best bet. By automatically adjusting server capacity, this scaling strategy optimizes application performance and resource usage. It’s like having a server that grows and shrinks with your application needs.
  • Manual Horizontal Scaling
  • When dealing with distributed applications that can evenly split loads across several servers, manual horizontal scaling is the way to go. This strategy allows you to manually add more instances of the application as demand grows or redundancy is required. It’s the key to handling expanding application demands while adding redundancy for better reliability.

By incorporating containerization and Kubernetes on the backend, BYO CI/CD enables engineering teams to maintain consistency in their runtime environments and ensure reliable code execution. This bridges the gap between the two ends of the complexity spectrum, allowing engineers to work in their preferred environments and efficiently hand off their code to an external process for global distribution - all while minimizing the intrusive nature of the existing CI/CD process.

Addressing The Kubernetes Skills Gap

Typically, managing deployments on a Kubernetes requires deep and specialized knowledge, which can be complex and time-consuming to acquire. This can also create a barrier for smaller teams or startups who may not have the resources to develop or hire such expertise.

However, with Dome’s BYO CI/CD feature, these concerns are significantly mitigated. It simplifies the deployment process by automating it and encapsulating it into a streamlined pipeline. When you use this feature, your containerized application is smoothly transitioned from your existing CI/CD pipelines into Dome.

By abstracting these complexities, Dome makes it possible for teams to enjoy the scalability and flexibility benefits of Kubernetes, without requiring deep expertise in the platform. Essentially, Dome acts as your specialized DevOps team member, handling the Kubernetes operations, allowing you to scale efficiently and react swiftly to evolving business requirements.

Seamless Integration: Dome’s Pickup Point

Dome picks up where the CI pipeline leaves off and accepts the fully built container image into a private registry where it is executed automatically deployed into a cluster with autoscaling limits, environment variables, port exposures that were predefined by the user. At this point all the user needs to do is add CNAME their domain to the dome.tools URL that is provided by Dome and continue using the source control and CI pipeline of their choice to push any updates and new releases. Any new images received by Dome will be immediately pushed into the cluster and made available to users.

Engineering teams retain control of their CI/CD pipelines with the flexibility to design a new code unique release process or have their existing process remain the same reducing overall toolchain and process invasiveness. The Dome platform then delivers a streamlined, modern, and hassle free deploy experience multiple developers.

Use Cases

Once the deploy process has been simplified spinning up staging and production environments becomes a much quicker and predictable experience. Engineering teams can spend a lot more time closer to the product that matter to them and their users and a lot less time in bloated cloud consoles wrestling with configuration and settings. Dome opens up opportunities for non-engineers to self host or deploy prebuilt images quickly and easily which is becoming increasingly important.

Services that process async jobs can benefit from short bursts of increased resource allocation. Static sized VMs are particularly inefficient for these types of services since their resource consumption spikes for short periods of time. Dome’s ease of deployment married with dynamic autoscaling allows these types of services to process jobs quickly when times are busy and free up unused resources when times are not busy. The result is substantial savings while maintaining performance and a billing model where you only pay for what you use (the area underneath the line).

Dome makes it possible for entire categories of applications to be deployed much more efficiently and more importantly be able to scale to meet ever increasing demands of users. We’re excited to see what you’re able to ship using the power and flexibility of the Dome platform. Sign up here and see how easy it is to integrate your existing development pipeline: https://app.trydome.io/signup

Share this post

Other blog posts