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 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
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.
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 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.