DevOps is a methodology for finding a way to get a new feature, a new idea, an enhancement… out to production to the customer such that they return feedback to use on improvements.
There are 3 venues to improve in:
- The software
- The development Environment for the software
- The process of software delivery
- Start with Dev. Environment (Developer)
- Build the Software (Build Engineer)
- QA Environment (QA Team)
- Pre-production: System Integration (Integration Tester)
- Pre-Production: user acceptance tests (User Tester)
- Production: Operations
You need to deploy software from one environment to the next. So for that, automation is recommended. Automation is needed because shifting software from one phase to another is not as simple as ‘copy and paste’.
Things to consider when shifting phases:
- There usually is a binary file that need to be deployed
- Configurations that need to be moved
- App server needs to be re-start
- Changed to database schema
- restart database service
- make sure services are talking to each other
- deploy new binary files
- Multiple nodes of application needs to have same version of software & same configurations
- & with proper coordination & order (Timing)
- All phases have different configurations
Continuous Delivery: is the capability to deploy this software to any environment at any time, when you choose.
I.e if a user finds a bug, the company needs to be able to apply the fix and quickly send out the fixed software (patch). So the company has to have their tools at ready (automation), expecting to receive bugs to fix. This readiness to act is Continuous Delivery.
Continuous Deployment: Automated deployment is constantly deploying updates to the software for any environment at any time.
Any change a developer makes gets deployed all the way to production. That is continuous deployment. (like continuous updates).