If you are from a DevOps background, then you are familiar with the term “Continuous Integration and Deployment“. If not, then we will try to understand in this blog.
Firstly, let’s understand, why it came.
Let’s go back few years and talk about waterfall model, let’s say if you have a client and it says we want to build a project. Now, in this case, it will take some time for you to make a project maybe six months or maybe one year. Now, in this case, you cannot simply ask your client to wait for one year then after we will give the project because things are changing very fast. Now, your client cannot wait for it, because there requirement might be changed or maybe there is some miscommunication. So, the client is asking for something else and you are giving something else so to prevent from this you need that continuous feedback and that’s why we are using a different approach nowadays which is Agile.
In Agile, what you have responsibilities is to give your client a ready product in every two to three weeks, not the entire product but the chunks of it. So, let’s say, a product have a ten features what you can do is you can give one feature in two weeks or three weeks now that will be amazing from a client-side because you will get a continuous feedback that’s one thing which is agile and the second thing here is now let’s imagine you are working on a project and it that project you have certain modules and you have multiple developers to work on it so what you have done is you have given one module to each developer. Now, the thing is when you as a Software Developer work on any project, let’s say you are using JAVA here so you will write a JAVA code and also responsible to test it and for testing you will be using JUnit.
Now when you test your class it is perfectly working i.e your unit testing is working perfectly but we miss one thing in testing which is integration testing because all these developers they will work together and when they work together they have to integrate it somewhere. We have operation team, development team and QA team. Now, your operation team are responsible to take that project and deploy it on server but you have missed that integration testing. Who is responsible to do that so what we have is, we have a automation test things so let’s say this is Friday evening and you have decided we will work for one week and on every Friday we will deploy the project i.e. we will integrate the project and then there will be an automation test. What if, something goes wrong in the automation test what if there are bugs. So, the problem is that this is Friday evening you don’t want to spend your weekends in the office so what you will do is you will solve that problem. You don’t have to wait for an entire week to submit your project because that’s happens in the industry to solve that problem we have a concept of Continuous Integration.
“The overall objectives of the Agile software development approach are to accelerate time to market and improve code quality…”
What is Continuous Integration
Continuous Integration (CI) benefits developers most because it allows for code produced to be automatically tested and continuously “integrated” with other developers’ code, and with the existing codebase. The developer benefits from receiving continuous and immediate feedback regarding code and integration errors. As s/he fixes these errors, automated testing tools in this stage will report if the errors were successfully fixed and when the code is accepted. This continuous feedback loop dramatically increases a developer’s productivity.
WHAT IS CONTINUOUS DELIVERY
Continuous Delivery is Continuous Integration + Automated Acceptance Testing + Manual way/step to deploy to production.
Continuous Delivery benefits business users because as soon as code is successfully accepted in the CI stage and a logical function can be tested, it is released to users. They verify that the features meet their expectations and provide feedback to developers who then address the feedback in this stage. This feedback loop between users and developers is continuous and seamless. Whereas in traditional waterfall method, users could wait weeks/months to see the features for the first time, this approach can dramatically reduce the time to just hours/days.
WHAT IS CONTINUOUS DEPLOYMENT
Continuous Deployment is Continuous Integration + Automated Acceptance Testing + Automated deploy to production.
Continuous Deployment seamlessly pushes code that has been successfully accepted in the CI/CD cycle into the production environment. This stage benefits all key stakeholders, from application investors who fund the development to external consumers and internal end-users as new features/application is available for immediate (external) commercial sale or internal use.
Developers can best utilize the CI/CD/CD process by leveraging on Open Source tooling (e.g., Jenkins, GIT, and Bamboo from Atlassian), or AWS services (e.g., Code Deploy) that automates various integration, deployment, and release management tasks.
Hope this helps to understand the concept of CI/CD.
Thanks and Keep Learning new things.. 😀