What is DevOps? is a question asked frequently by individuals who hear the term for the first time. There is no real concrete definition of what DevOps is but we can think of it as a culture within an organization for building, testing, deploying, and maintaining software projects. It is not limited to only large organizations but also small or individual projects can also implement DevOps techniques in their development cycles.
In the early days of software development, most IT organizations utilized a manual system for building and deployment of software. It often involved the following steps:
- The development team writes code to implement new features or fix a problem and the code is deployed to the development environment and generally tested by the development team.
- The code is deployed to the quality assurance environment where it is verified by the testing team.
- The code is provided to the operations team for deploying to the production environment where the operations team is responsible for managing and maintaining the code.
The approach often led to several issues that made the maintenance of large and complex applications very difficult. Some of the issues were:
- The transition of the current application build from the development environment to the production environment could take a long period sometimes weeks or months.
- The development and operations teams are not aware of each other's work or work culture.
- Both teams work in different types of environments and there might be a possibility that the development team has resource constraints and they, therefore, use a different type of configuration which might work in localhost or the developer environment
- The development team has the executable files, configuration files, database scripts, and deployment documentation. They provide it to the operations team. All these Artifacts are verified in the development environment and not in production or staging.
- Different teams may take different approaches to setting up the runtime environment and the configuration and deployment activities.
- There is hardly any collaboration between the development team and the operations team resulting in constant back and forth communication between the teams.
- The release cycle is often long and the development team has to make assumptions before the application deployment takes place.
- The operations team is supposed to diagnose and rectify issues after application deployment in isolation.
These issues affected IT organizations for a long time necessitating a need for change in the entire system. As time went by the processing power of computers increased, the internet became accessible to a large segment of the population and mobile devices became mainstream. Customers now needed their software applications to be updated frequently with new feature releases or bug fixes. Organizations that wanted to stay in business could not afford long release cycles anymore.
These inadequacies led to the rise of Agile methodology in software development. It laid emphasis on working software, and customer collaborations using feedback for improvement in subsequent steps. It emphasized customer satisfaction through continuous delivery in small interactions for specific features in short timelines or sprints. By utilizing sprints multiple deployments can be done to showcase features to customers for feedback instead of deployment being a one-time activity.
DevOps through agile methodology aims to address these challenges by developing a partnership between the development and operations teams. The DevOps movement advocates for communication, collaboration, and integration between software developers and IT operations. DevOps essentially extends the continuous development goals of the agile movement to continuous integration and release. DevOps can alternatively be defined as a combination of agile practices and processes leveraging the benefits of cloud solutions.
Continuous Integration(CI), Continuous Testing(CT), Continuous Monitoring (CM), Continuous Feedback(CF)and Continuous Delivery(CD) are the core components of the DevOps lifecycle. Continuous integration involves automating builds, unit tests, and packaging processes. Continuous Delivery is concerned with the application delivery pipeline across different environments. Continuous Monitoring is concerned with monitoring every stage of the development cycle in order to have transparency about all processes. Continuous Feedback is about providing a continuous means of improvement and innovation by getting feedback from stakeholders who know what they need and what the outcome of the system should be.CI and CD accelerate the application development process through the different phases enabling us to achieve complete automation in the application delivery lifecycle. Different tools are used in the DevOps lifecycle we’ll list them below and highlight how they are used in subsequent articles. Thank you.
- Continuous Integration: Jenkins
- Configuration Management: Chef
- Cloud Service Providers: AWS, Microsoft Azure
- Containerization: Docker
- Continuous delivery/deployment: ssh
- Continuous Monitoring: Zenoss, Nagios
- Code Repositories: Git, SVN