Products
Resources
Sign Up

Continuous Integration, Delivery, and Deployment

Continuous Integration, Delivery, & Deployment offer teams an unmatched deployment strategy for
receiving fast feedback, meet changing requirements, optimizing quality, and shipping products to market faster.

CI vs CD vs CD

Continuous Integration

A a strategy where developers continuouslly merge their code changes into a shared, controlled repository.

Continuous Delivery

The practice of continuously being able to deliver tested code to production, while manually deploying to production.

Continuous Deployment

The combined strategy to automate your build, testing, and deployment process for both speed and quality.

While all related to the same workflow, Continuous Integration, Continuous Delivery, and Continuous Deployment
encompass various parts of the process.

The Continuous Workflow

Continuous Integration

With Continuous Integration, developers integrate multiple times throughout the day and ideally commit to changes about once a day. Each change made is small, frequent, and shared to a single repository, making it easy to test.

Continuous Integration is preferred by developers because it allows daily constant feedback in development from all contributors and faster product time to market. Also since the repository of code is controlled, there is reduced risk to integrating all these changes in these small increments so often.

Additionally, it’s easier for testers to catch and resolve issues early in the process instead of waiting until release. When defects are found, they’re usually much smaller and easier to fix, reducing the risk of bugs in the final product and improving the overall customer experience.

Continuous Delivery

In turn, this type of code integration leads to Continuous Delivery. Once the tests pass, the new build can be manually rebuilt and deployed by a PM or Lead Engineer who will usually check all systems before deploying. This also means that software that is pushed to the staging server and subsequentlly run through tests is always functionally stable and ready to be deployed at any time throughout the day.

Since code is constantly built, added, tested, and deployed regularly, new features can also be delivered on a daily or weekly basis instead of a monthly or yearly one. This means new features, functionalities, and fixes can be continuously released to the end user.

By constantly integrating improvement and catching problems early, teams find that software released under a Continuous Integration strategy is released more often and at a higher quality.

Continuous Deployment

To take that one step further, Continuous Deployment is the automation of most, if not all, parts of your delivery life cycle including testing, building, and deploying.

Every change to the code base triggers a set of activities in your deployment pipeline, ensuring quality and delivering code straight to production if passed.

The Benefits of Being Continuous

Release Often

The stability of the Continuous Integration workflow allows developers to regular make small code changes and build against the repository. Because these changes are built on top of a stable and functional foundation, the software is always available and releasable, while new features can be delivered to customers every day if an organization choses.

Test Often

Because of the reduced risk of defects and ability to more easily fix bugs, software that is released is usually of much higher quality. This prevents issues that can arise for an organization’s reputation when software is released to the end-user with prevalent bugs that have gone un-tested. Additionally, since new features and functionalities are being released more often, Continuous Integration is more able to meet the high demand of the consumer.

Boosted Collaboration

Developers, QA/testers, product owners/managers, and other stakeholders can no longer work as separate entities in order to iterate often, test continuously, and ship quickly. Continuous Integration encourages more company-wide communication to ensure everyone is an equal contributor and there is fast feedback as well as an agreed upon definition of done. Additionally, this increases visibility and reduces overhead.

Reduce Risks

Because testing is done more often and on smaller integrations, the risk that the software will be delivered with an issue is reduced dramatically. Bugs are found more easily, and when they are found, it’s simple to isolate them and fix them. Additionally, intermittent testing can match code rather than waiting until a complete feature is developed or released to the end-user.

What Else Can Delivering Continuously Help Software Teams With?

  • Build and test simultaneously
  • Testing covers more code and is done more often
  • Decrease code review time
  • Create reusable tests
  • Facilitating automated tests to reduce repetition
  • More time for building features and less time debugging
  • Automatically deploy code
  • Functional software is always available
  • Easier to maintain, track, manage, and analyze
  • More accurate documentation

Where CI/CD and Agile Intersect

Continuous Integration piggy-backs onto Agile development in the way that the organizational structure of Agile is best achieved through the continuous integration of features. This is because Agile was created so developers could solve issues as they come instead of trying to predict and solve every change up front, and only test right before the product launch.

While teams with an Agile methodology strive to support more change throughout the development process, Continuous Integration inherently allows developers to do this full force by making changes multiple times throughout the day.

Additionally, sprint planning allows for the constant feedback from both customers and developers as well as other team members.

Though Continuous Integration often works best as part of Agile or Extreme Programming (where the term originated), it can also be leveraged in other environments such as Waterfall or RUP.

The Need for Continuous Testing

Another element of CI and CD less commonly acknowledged is Continuous Testing, or the practice of testing for every integration. You may even consider Continuous Testing a prerequisite for Continuous Integration and Delivery.

It makes sense that Continuous Testing goes hand-in-hand with Continuous Integration to make sure that bugs are found early and are easy to fix. 

While many changes are made on a daily basis, there’s an opportunity each time for those changes to disrupt a previously working part of the code. Though testing early and often is a significant part of Continuous Integration, teams don’t always prioritize it as much as they should.

Not to mention the fact that even if that code is working properly in one browser, it may not render the same in others.

This is where test automation and Selenium grids come into play to ensure every integration is met with parallel testing across browsers.