DevOps is a software development practice which involves continuous Development, continuous testing, continuous integration, continuous deployment and continuous monitoring throughout the software development life cycle -Anshul.
DevOps methodology integrates software development and IT operations teams into one body and adopts the agile methodology of delivering software in chunks as against the traditional waterfall model. It seeks to reduce the long back-and-forth processes involved in software development to enable continuous and speedy production of quality and reliable applications.
The most renowned concept of DevOps is “Continuous” from the planning stage to the code, build, test, deploy, operate, monitoring and continuous feedback mechanism within each of the stages. As a role-sharing methodology, the stages in DevOps differ per the organization but the objective is the same across the board, sharing the software development practices between the Dev. and Ops teams. DevOps is a highly automation-incline practice seeking to rid of manual processes that are prone to human errors, redundancy and time wasting, using a wide range of tools and technologies to achieve the overall benefits.
DevOps Phases - Software Development Lifecycle (SDLC)
- Planning
In the planning phase, teams determine the business goal, the software's vision, and user preferences based on user feedback and judgements. Decisions regarding the technology, ecosystem and design to utilise, the number of sprints the entire production would cover and the activities per sprint. This stage develops a project roadmap to optimise operational efficiencies and produce the intended output to effectively complete the business/project goals.
Tools: Sprints, Miro, Mura, Kanban, etc.
- Coding
The code phase is where the coding for the project begins; coding is the foundation of every software. Scalable, superior and secure software is built by writing effective and secure code.
To collaborate and track issues, developer teams employ distributed version control systems such as Git, plugins, and feedback tools. If developers are in low supply, coding could take time; automation technologies can help speed up this process.
Tools: Git, Github, Mercurial, Gitlab, etc.
- Build
When developers conclude the code job, they commit the code to a common repository designated for the project, it is from there that the code is then built for tests. The build is executed in a dev environment to enable debugging and error fixes using automated build tools.
Tools: Maven, Gradle, Bower, Cmake, etc.
- Test
If the build is successful, the code goes into the test area where it is subjected to various kinds of automated tests using test tools to examine for any bugs and other software behavioural issues.
Some of the tests that are likely to be performed during this stage include user acceptability (UI/UX) testing, security testing, integration testing, performance testing, and so on, to validate the quality of the software and the project's functionality.
Tools: JMeter, Selenium, StackHawk, Snyk, etc.
- Deploy
Once the build is complete, the tests are run, and the results are validated, the approved software adjustments are deployed to the production area. The releases are scheduled and deployed by the operations team. Depending on organisational procedures, the software may be delivered to production in single or numerous releases for end users/customers to access.
Tools: Chef, Ansible, Puppet, Saltstack, etc.
- Operate
In this stage, the operations team is responsible for server configuration and provisioning to manage the project in the production environment using automation tools to help maintain the flow.
Tools: Terraform, Docker, Kubernetes, Opsgenie, etc.
- Monitor
At this point, the software is in use and interacts with the DevOps pipeline, using information from customer feedback regarding application performance, behaviours, and so on. Monitoring the overall pipeline assists DevOps teams in identifying impediments that affect their productivity.
Tools: Nagios, Prometheus, Splunk, Datadog, etc.
The SDLC Pipeline and Key Components in DevOps
- Continuous Development
The continuous development pipeline covers two stages in the Software Development Lifecycle - Planning and Coding. The planning stage of the software lifecycle looks into the vision of the software, the version for each release and the feature/security issues each version should tackle. The DevOps methodology submerges all the stages to cover a sprint or a few more and the method of release within each sprint. The programming languages which are best suited for the software and the version control systems for effective code migration and maintenance, speedy team collaboration and feedback mechanisms.
This phase involves the planning and coding of the software. The vision of the project, the version for each release and the feature/security issues each release should tackle are decided during the planning phase.
The plan decides all the stages to cover in a sprint, the number of sprints the entire production would cover, and the activities within each sprint. The developers decide the programming languages which are best suited for the software and develop the code for the application. No DevOps tools are used here; there are version control tools like Git which are effective for code migration and maintenance, speedy team collaboration and feedback mechanisms.
- Continuous Testing
Continuous testing involves the build and test phases. As the codebase is developed or maintained, this pipeline incorporates automated, pre-scheduled, continuous testing of the code.
This is a pipeline in which the built code is continually tested for bugs using automated testing methods and tools. These testing tools enable proper tests against the code base in parallel to ensure that there are no errors to affect its functionalities or vulnerabilities to hamper the application's security. Once the test is successful, there is a continuous integration of the tested code with the existing code.
When compared to manual testing, automation testing saves a significant amount of time and work. Also, automated test tools produce reports to analyze failed tests. It makes it easier to schedule and reschedule tests at set hours.
- Continuous Integration
This is the heart of the DevOps processes. Continuous integration(CI) is a process of automated build and automated testing that allows developers to find and correct mistakes rapidly. Because an auto build is triggered after every commit of the source code and then automatically deployed on the test server, if testing reveals an error or a security flaw in the code, developers only need to check the most recent commit made on the source code instead of retesting the entire codebase to improve the speed of software releases due to a prompt feedback mechanisms from the build and test practices.
The continuous integration pipeline requires that developers commit changes to the source code more frequently. This could be done on an hourly, daily or weekly basis and ensure that changes made to the source code do not break the build or generate additional issues.
- Continuous Delivery
Continuous integration allows us to automatically generate builds that are suitable for deployment. A continuous delivery(CD) pipeline aims to deploy software per a release from the production environment, staging environment, testing environment, or any other environment to servers that are up, running and ready to receive the application, which is usually a container. In continuous delivery, deployment is done consistently so that any changes made to the code do not disrupt the application's operation during high traffic.
- Continuous Monitoring
Continuous monitoring is a consistent operational attribute in DevOps where crucial information about the software's real-time use is captured and thoroughly analysed to detect flaws and issue areas.
Monitoring of the general performance of the programs, storage and other resource utilisation, log events, and the health of the servers on which they run. This pipeline tends to resolve issues such as server downtime, limited bandwidth, low memory, poor performance of the application and so on to ensure the application security and steady availability.
- Continuous Feedback
Continuous feedback functions similarly to a report card. In the continuous feedback pipeline , feedback and issue tracking mechanisms are integrated to make the software automatically communicate back insight into its current behaviour, activities and user challenges. customers are able to share their experiences as well as provide reviews.
consistent feedback between operations and dev teams and reviews from end users are integrated in the creation of the future versions of the application.