# CICD
## Continuous Integration
As a best practice, with CI we can continuously take programs in teams that can always push and update their tasks on platforms for others to easily access it. After pushing the CI server runs some predetermined tests to ensure the new code doesn’t break anything.
Sending A green signal to show the code is integrated properly without error and a Red light if any error occurs.
This was made popular by Agile development. and something called extreme programming
Tools for CI pipeline creation:- Circle CI, Travis-CI, Github Action, Jenkins.
## Continuous Delivery
CD builds on Integration, CI is the first step, and CD takes things a step further giving us more confidence in our code. Making us confident that our code will work in production. That the code is in a state that could be released to users at any point in time.
Acceptance Test – Makes sure the application does what it claims it does. And that the users can use it for that purpose.
## Continuous Deployment
This is the end goal it takes continuous delivery and automates it.
CDeployment isnt for everyone. Some product need to go through sensitive test, the cost of error is so.
It is a process we use to realse our software.
## CI Pipeline
This are set of steps that need to be completed, as part of CI process.
Start
- Project Repo
- Actions Tab
## Waterfall Model
It is a delivery model, use for delivering solutions.
It is a model that is use to capture requirements, and then cascade each key deliverable, through a series of different stage gates, that is use for building out the solution. (months to release)
- Requirement
Analysis
- Design
- Development
- Testing
- Maintenance
- **Requirement Analysis**: This where you sit down with the client and try and decipher what they are looking for in the software to be built.
- **Design**: From the analysis we build out a project plan and design architecture.
- **Devlopment**: Programmers code according to plan and design.
- **Testing**: Testing ensures the application is error free and meets the requirements.
- **Maintenance**: After application is delivered the operation team maintain the application. Making sure the application keeps working.
Disadvantage of Waterfall
- If client is unhappy with product, the entire project cycle is restarted.
- This is time consuming and expensive.
- Takes awhile before clients test and check app,
## AGILE MODEL:
This allows programmers to create prototypes and get the protypes to clients faster.
Here the entire process of building a software is broken down ino small actionable blocks called sprints. (some times 2weeks).
Product Idea - Product Backlog - Sprint planning - Spront backlog - Sprint - Delivarable Product - Product review.
Advantage:
- Client requirements are better understood because of constant feedback.
- Product is delivered much faster compared to waterfall model
Disadvantags:
- The producte gets tested only on developers computer and not on production systems.
- Developers and operation tem work in silos.
## DevOps
This is an upgrade to the agile (release every day)
plan - code (git) - build(maven/gradel) - test -
- Time taken to create and deliver software is reduced
- Complexity of maintaining an application is reduced
- Impproved Collaboration btw developers and operations team
- Continous integration and delivery ensure faster time to market.