What is Continuous (Integration, Delivery, Deployment, Testing) ?

Recently along with ‘BDD’ in Agile, I have been hearing a lot about CI, CD, and people confusing about it. I was clear enough with my own understanding and at one point different opinions made me confuse and thought Should I step back and revisit my knowledge on the CI and CD. Here I am posting my findings and definitions, am not an expert DevOps person, but a Test Automation guy who is involved in these process and happy to be corrected if am wrong.

First let me define these terms in short

Continuous Integration

  • It basically just means that the developer’s working copies are synchronized along with a master level branch, several times a day.


  • Continuous Integration is a software development practice where members of a team integrate their work frequently,usually each person integrates at least daily – leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.” – Martin Fowler

    Tools for CI Cruise Control, Jenkins, TeamCity and others

    Continuous Delivery


    It means that you deliver software in continuous incremental fashion and also deploy frequently. Here deploying could be to a test environment or pre-prod environments. Helping to match a local environment that is same as production, this process can be automated using tools as mentioned below.

    Tools like Puppet can help in automating this process for CD.

  • [Develop – Deploy – Test – Release] When these happens faster and more frequently to ensure we deliver a valuable software.
  • A change should be proven to be deployed to production at any time.
  • It is described as the logical evolution of continuous integration, always be able to put a product into production!

    “When you have continual production readiness of every build, but you don’t deploy every build automatically, say x times a week instead, that is Continuous Delivery. – Alister Scott”

    Continuous Delivery is a synonym to Continuous Deployment

    Continuous Deployment

    Continuous deployment is continuously being able to move the result of a development process to a production-like environment. It’s logically the next step after Continuous Delivery, where it undergoes an automated functional testing executed in full scale giving us the confidence to establish a good build to be pushed into production.


    Automated testing helps in Continuous Delivery process.

    Continuous testing(CT) doesn’t happen without automation. If no automation in place and depending on manual testing, a developer checks in a change and it goes through a build process that may take hours or days to produce feedback. Automation accelerates the cycle, checking the code and providing feedback in a matter of minutes.

    CI > CT > CD > CDeployment.
    Develop piece of code, push it Continuous Integration process which is validated by a Continuous testing via Automated testing that enables Continuous Delivery and Deployment.

    A good friend, Alister Scott have summarized on Continuous Delivery short and sweet.

    5 thoughts on “What is Continuous (Integration, Delivery, Deployment, Testing) ?

    1. Continuous Integration is continually integrating several developers code, compiling, deploying and automatically testing (Continuous Testing) that code, and that can be on a branch, or in trunk/master.

      When you have continual production readiness of every build, but you don’t deploy every build automatically, say x times a week instead, that is Continuous Delivery.

      When you automatically deploy every build to production after it’s been automatically integrated, built and tested, that is Continuous Deployment.

      Briefly explained here: http://watirmelon.com/2012/07/26/continuous-delivery-semantics/

      So Continuous Integration (CI) and Continuous Testing together allow Continuous Delivery. Continuous Delivery allows Continuous Deployment (should you choose to do this).

      Martin Fowler explains this in more detail here: http://martinfowler.com/bliki/ContinuousDelivery.html

    2. I GuessI have conveyed the same expect for second para that you have mentioned. I will add that to original post a quote and mention your name 🙂 Thanks.

    3. Hi Manoj,

      Thanks for the write up. I thought that continuous integration also meant that the code that is being checked in is also verified against an automation test suite to provide immediate feedback to the developers.

      Thanks
      Karthik

    Leave a Comment

    Website Protected by Spam Master