What is DevOps?

DevOps is a combination of culture, practice, and tools that increase the ability to deploy and deliver applications and services. It also helps us improve the product and service delivery faster in comparison to a traditional development model.

DevOps, as we read earlier, merges two teams into one to manage the complete development life cycle. Alternatively, there can be multiple teams responsible for each activity. As well as, the DevOps process is also tightly coupled with the security and quality teams in a full cycle.

We say DevOps is a practice because here we practice how to automate the process that was defined in history and was manual, complex, and slow.

"DevOps isn't any single person's job. It's everyone's job."
– Christophe Capel, Principal Product Manager, JIRA Service Desk

To automate the process, we use different tools and technology that equip us to transform the process quickly and reliably. Here, one person can complete the task without being dependent on other teams.

In DevOps, we have multiple processes. We could say that we have a process chain, as each activity is dependent on another. The following are the activities or processes that we have in DevOps:

  • Code: At this stage, we plan to define infrastructure. Here, we must have a platform where we can let people work on the same application in a collaborative environment. For this, we have tools such as GitHub, Jira, and SVN.
  • Build: In the build process, we actually fetch the code from the source repository and organize it into builds and then perform testing. Here, you could say that builds are prereleased packages. For a build, we use MAKE and ANT. To test the builds, we need infrastructure where we can run the code. For this, we can consider Docker and Vagrant, which help us provision instant infrastructure.
  • Package: Once builds are tested, we organize them into packages. Packages are collections of builds that are ready for release. Basically, here all modules are combined together to form a release for testing. For packaging, we use a universal package manager such as Nexus or artifactory, and system-level packaging tools such as Git.
  • Release: Once a package is tested, it is transferred as a release. This includes schedule and deployment into a production environment. We have tools such as Puppet and XebiaLabs for this.
  • Configure: Once the release is complete, it goes into the configuration stage, where we need to perform some steps to do the required configurations for infrastructure deployment and application deployment. We have the Ansible, Chef, Puppet, and Salt tools for configuration management.
  • Monitor: Now, when a configuration is done to run the application or release, it goes into the monitoring stage, where all the components should be monitored very minutely, and alerts/alarms on anomalies are sent. For this, we have New Relic, Zabbix, Cacti, Wireshark, and so on.