What is DevOps?
- short of Development and Operations.
- set of tools and practices, designed to shorten the software development lifecycle process.
- An agile relationship that bridges the gap between development and IT operations
- Used to automate and integrate the processes between software development and other operations so that the software can be built, tested, and released in a faster and reliable manner.
- Development includes planning, creating, verifying, and packaging.
- Operations include releasing, configuring, and monitoring.
Traditionally, or say 10 years ago, the development team could be roughly divided into developers — people who knew how to write code, and operations. For those who still wonder — who on earth are those operations:
They are administrators — sysadmins, network admins, database admins, and all other people who know the infrastructure.
So… The operations were interested in keeping things stable to minimize the chance of software conflicts. While developers mostly cared about new features, new versions, and well, yes bug fixes. The main problem with all the above was the lack of cooperation and communication. As a result, the software couldn’t be delivered at a desired fast pace.
Now, take developers and operations, merge them into a single team, and drive them with the idea of mutual support. You get DevOps.
DevOps methodology allows delivering software frequently with minor iterable changes.
Adopting DevOps Model
Continuous integration means that developers regularly merge their code changes into the main branch, and each merge is followed by automated running and testing.
Therefore, continuous integration helps to detect and resolve conflicts and errors at the earliest stage possible.
Continuous delivery, in turn, stands for the regular, automatically performed deployment of a new version into a production environment.
Implementation of CI/CD provides a high level of automation at all stages, reduces the human factor and allows the team to concentrate on creation, thus minimizing the time and effort needed for manual operational work. It results in faster development and, consequently, more frequent and less risky releases.
Monitoring and Logging
No test can provide information the same degree of reliability and volume as actual data from actual users. Gathering, categorizing, and analyzing logs lets the team detect issues, come up with new features and improvements, and continuously make products and processes better..
Infrastructure as Code
Traditionally, information on infrastructure configuration was stored in one of two places: the memory of system administrator or some machine (from where it could be read only by a system administrator). But a person can get sick, and a machine can be stolen or broken. That leaves us with a huge bus factor, which we have already mentioned before.
It seems clear that we need to store this kind of information in such a way that any team member can read and change it, so that it won’t depend on the vulnerability of an expert or hardware.
Infrastructure as code practice implies that system resources and infrastructure settings are defined via machine-processed definition files, which allows the DevOps developer to configure them as program code. Those files can be stored in the same version control system, where code is stored, so they can also be reviewed and reverted. Moreover, changes in configuration files are automatically deployed into the production environment.
Microservice architecture implies that the application is divided into small parts, each built around one elementary function. They can even be written in different programming languages, use different frameworks, and operate under different operating systems!
Microservices are easier to test, maintain and reuse. The dependencies between them are reduced to a minimum, so adding a new one requires no change in the existing parts. However, this approach can’t work without thoughtfully designed testing.
A project built on microservices is always ready for growth and significant changes.
This practice requires detailed recording and updating of information, describing hardware and software (released updates, versions, environment settings, etc.). Simply put, the company always possesses up-to-date detailed information for all of its resources.
Those records provide great insurance in case any major issues arise, because you can always perform a rollback and recover any configuration version. Sometimes, when a server is down for one second, it can lead to a million-dollar loss, so configuration management gives the system high reliability.
Essentially, the whole DevOps approach involves the complete removal of extra manual work. Version control, testing, deployment — if anything can be automated, you automate it. It may require some resources at the beginning, but will give you a noticeable head start in the near future. If your goal is to create a truly scalable and flexible system, automation is the best investment you can imagine.
DevOps with Agile
What is Agile?
Agile is an iterative development process that promotes continuous iteration of development and testing throughout the project life cycle.
Agile Example: Scrum
Agile and DevOps
- DevOps is a set of practices and tools designed to shorten the lifecycle of a software development process.
- Networking and cost related issues, tools and software compatibility, and DevOps culture are a few challenges in traditional Software Development Life Cycle approach.
- Agile is an iterative development process that promotes continuous iteration of development and testing throughout the life cycle of a project.
- Continuous development, continuous testing, continuous integration, continuous deployment, and continuous monitoring are the five phases of DevOps.