What is DevOps?
DevOps is a term used to refer a set of practices that emphasize the collaboration and communication of software developers and Information technology(IT) professional while automating the process of software delivery and infrastructure changes. It aims at establishing a culture and environment where building. Testing and releasing software can happen at a high velocity and more reliably.
Note that it does not comprises of any one tool neither it excludes any one activities that we do in traditional delivery model.
One of the goal of DevOps is to having an environment where releasing more reliable application can happen more frequently.
To implement DevOps we may need many tools. Many of the tools we already used in one or the other activities.
Under a DevOps model, development and operations teams are no longer “siloed.” Sometimes, these two teams are merged into a single team where the engineers work across the entire application lifecycle, from development and test to deployment to operation. Testing/QA and security teams also become more tightly integrated with development and operations. They use different set of tool which help them operate and evolve applications quickly and reliably. These tools also help engineers independently accomplish tasks (for example, deploying code or provisioning infrastructure)
Benefits of DevOps
- Shorter time to Market
- Speed
- Rapid Delivery
- Reliability
- Scale
- Improved collaborations
- Security
Transitioning to DevOps requires a change in culture and mindset. At its simplest, DevOps is about removing the barriers between two traditionally siloed teams, development and operations. In some organizations, there may not even be separate development and operations teams; engineers may do both. With DevOps, the two teams work together to optimize both the productivity of developers and the reliability of operations. They strive to communicate frequently, increase efficiency, and improve the quality of services they provide to customers.
What are DevOps essential practices?
- Frequent but small updates
- Continuous integration
- Continuous Deployment/Delivery
- Microservices
- Infrastructure as a Code
- Configuration management
- Policy as a code
- Monitoring and Logging
- Communication and collaboration
DevOps tool set
There are no single tools that can achieve all practices. We need different set of tools. Some of the tool categories are listed below.
- Code — Code development and review, version control tools, code merging [ eg: GitHub, TFS ]
- Build — Continuous integration tools, build status [ eg: TFS, Jenkins]
- Test — Test and results determine performance [ eg: TFS test tools, Selenium etc]
- Package — Artifact repository, application pre-deployment staging
- Release — Change management, release approvals, release automation
- Configure — Infrastructure configuration and management, Infrastructure–as–Code tools [Eg: Docker, Puppet, Vagrant ]
- Monitor — Applications performance monitoring, end–user experience [ eg: NewRelic, Azure Application Insights]
For more details on DevOps refer the following sites.