The following is a guest blog post written by Evan Glazer.
DevOps Principles Simplified. This will be an on-going DevOps series for information technology professionals and associate to mid-level engineers to boost their confidence and awareness. The series also has the intention to improve knowledge, simplify concepts and create awareness around tools that will fit into your day-to-day dev operations at work to be able to have a successful CI/CD environment.
As the series continues, comprehensive topics will be discussed ranging from AWS libraries like CloudFormation, CodeBuild, RDS, Device Farm, EC2, Load Balancing, Testing, etc. This article is going to strictly focus on the philosophy, principles, and methods that DevOps professionals are thinking about when implementing architecture into the application.
So, what is DevOps?
DevOps is a practice that combines software development (Dev) and information technology operations (Ops) to shorten product release times and provide high software reliability to your clients. You will see DevOps a lot of times defined by an infinity loop to symbolise continuous integration and processes in the development cycle.
Today, we think of development-operations as a combination of behavior and set of tools, while it really is an enterprise fancy software term meant to improve the relationship between two business units. Overall, there are a lot of tools needed to put the puzzle together for your operation: development, testing, integration, deployment, monitoring. But this should not scare you as learning about each topic and technology is key to break the fear!
DevOps Methods and Definitions
Methods or the processes behind the system are intricate parts to reach sustainability when releasing hotfixes on the spot, or doing weekly product pushes.
Continuous
Everything is continuous. You will see this word slapped around in multitudes of ways when people are speaking about DevOps. Normally there are many "continuous" integrations that are verified by an automated server before deployment.
Development
This is the process in which engineer commits code in small chunks multiple times a day for it to be easily tested.
Deployment
Code is ready to be deployed to run in a develop, staging, or production environment on a public server.
Monitoring
At this stage, it is time to find defects in the application, if any. Detecting problematic themes in the application and receiving feedback from users helps improve your clients experience.
DevOps Principles
A principle is a fundamental truth that serves as a foundation for a system. When it comes to DevOps; the philosophy and belief system is set around these important principles: automation, continuous improvement, and collaboration.
Automation
Spending countless hours, days, or weeks trying to release a product can be extremely costly and slow down your project schedule. Automation is the key principle in my opinion when thinking about being able to release and deploy code in minutes instead of hours. Could you image a big client issue and you can't correct the issue for 3 days because someone who does DevOps on your team is out of town (what do you do?). Having a strong automation server to be able to test and make sure nothing breaking is being released is key. As it is to be able to automate the deployment process when everything is ready to go and passes your companies "must" processes.
What Tools Help With Automation?
Jenkins - The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.
Kubernetes - Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications.
Continuous Improvement
I'm sure you've heard the phrase continuous integration (CI), continuous deployment (CD). Continuous improvement is the ideation where the process can always be better and stronger and has room to adjust whenever needed. Testing your application before you deploy to make sure you don't break features is key to a continuous process, alongside being able to monitor your application metrics, responses, logs, errors, etc.
What tools help with Continuous Process?
Selenium - Primarily, it is for automating web applications for testing purposes, but is certainly not limited to just that. Boring web-based administration tasks can (and should) also be automated.
Elastic - the company behind the Elastic Stack — that's Elasticsearch, Kibana, Beats, and Logstash. From stock quotes to Twitter streams, Apache logs to WordPress blogs, they help people explore and analyze their data differently using the power of search.
Collaboration
A source code repository is key for engineers to be successful in working together. Following a successful Git Workflow to model development and release branches is needed to not create merge issues in the development process so you can release code rapidly.
What collaboration tools can help with the process?
Docker - Docker is a set of platform as a service products that uses OS-level virtualization to deliver software in packages called containers. Containers are isolated from one another and bundle their own software, libraries and configuration files; they can communicate with each other through well-defined channels.
Git Image - Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.