Continuous Integration

A Continuous integration infrastructure relies on the dedicated server that can be on premise or hosted via cloud platform providers. When the pipeline is triggered, the server in charge of fetching the code at stake is building it, preferable in an isolated way.

The isolation can be done by virtualization technique:

  • Hypervisor — cloud Virtual Machines (on AWS, GCP, Azure, etc.)
  • OS-level virtualization — Docker Engine with isolated containers that share OS and/or bins/libraries.

Continuous Delivery

It is an extension of Continuous Integration to make sure that you can release new changes to your customers quickly in a sustainable way. It means that on top of having automated tests, you have also automated your release process and can deploy your application at any point of time with the click of a button.

With Continuous Delivery you can decide to release every few minutes, hourly, daily, weekly or whatever suits your business requirements. However, if you truly want to get the benefits of Continuous Delivery, you should deploy to the production as early as possible to make sure that you release small batches that are easy to troubleshoot in case of issues.

Continuous Testing

Continuous Testing consists of two lean components: Shift-Left and Shift-Right Testing. Meaning testing early (during requirement gathering, planning, development, etc), testing often, testing everywhere, including in production. Continuous Testing is a way to boost, speed-up, and support CI/CD pipelines.

Automation is the most important part of Shift-Left Testing. If test team members are part of regular Agile standup meetings, they come up with automation frameworks and languages that are best suited for a particular application to execute unit and smoke acceptance automation tests close to code thus improving code health.

Shift-Right is a method of testing and monitoring in production. This approach helps developers uncover new, unexpected scenarios that may not have been detected within lower environments. It therein elevates to fix bugs before end users find them and boost software efficiency. In conjunction with manual exploratory testing, it can also have a big impact on the product as a whole to achieve customer’s success.