DevOps is a slogan that is usually tossed around ̵1; it really is a set of principles designed to streamline and control the entire development process, from the brains of your programmers and to your servers.
Most teams can probably divide their developers into two main categories:
- Developers who handle updating the code base, fixing bugs and programming. You can also include other roles, such as web and interface designers in this category. In general, it includes everyone involved in actually building your product.
- SysAdmins, or “Operations Team.” These people handle updating servers with new code, manage both your public and internal server infrastructure and keep everything going.
To put it simply, DevOps is about integrating these two teams together (hence a name). It will not turn your developers into sysadmins, or vice versa, but it should help them work together.
Each aspect and phase is complemented by tools that make the whole process easier. DevOps is more than just tools and automation, and implementing a set of “DevOps tools” does not automatically get your team twice as fast, but these tools are an important part of the process, and it would be difficult to be as effective without some of them.
While there are many other slogans that are thrown under the umbrella “DevOps”, the basic concept is quite simple. When a team is working properly, DevOps generally flows like this:
To explain, we start with the monitoring phase. This means keeping an eye on your servers, looking at analytics, analyzing logs, and identifying problems with your code base. While a large part of this is code-related, much of it also falls on the business side. Do you achieve your goals effectively? Are your customers satisfied? This phase is about finding out what is wrong so that you can set real goals. Popular monitoring tools include Nagios, AWS CloudWatch and analytics software such as Google Analytics.
You may receive a ticket directly from a customer and start from the planning phase. This is where you will sit down with your leading developers and discuss what needs to be done to complete a ticket. If you use software like Jira, you will probably split a large ticket into individual stories and problems that can be more easily tracked and assigned to individual developers. If you are planning a code print for the next or two weeks, you want your plan clear to reduce the time you spend repeating the code.
Instead of testing and building only once when everything is ready, in a DevOps environment, each developer will prefer to submit changes to the source control several times a day, when the problems are complete or a minor milestone is reached. This allows the construction and testing phases to begin early and ensure that no developer gets too far away from the main source control head. This step is mostly about proper source control management, so having an efficient git service like GitHub, Gitlab or BitBucket is crucial for continuous integration to work smoothly.
You do not have to distribute all production commitments directly, but fast automated implementations are an important part of being able to run fast releases. In addition, it takes some stress from your operations team, so they can focus on more important things than manually updating servers with new code.
When new changes have been distributed, the cycle begins again. Perhaps the new feature you added causes the staging database server to work overtime and may need to be marked for performance review and fixed before being deployed for production. If everything flows properly, DevOps ends up being a fixed series of steps and simply becomes a culture that everyone follows naturally.
Continuous integration / continuous delivery pipelines
Automation and tools are a big part of all DevOps environments. Perhaps the biggest tool to have is a continuous integration / continuous delivery (CI / CD) pipeline. This is an automated process that begins with source code and manages the process of building, testing and distributing to servers.
AWS CodePipeline is a good example of this. When a change is detected in the source controller (either GitHub, BitBucket or AWS CodeCommit), it is passed to AWS CodeBuild to build and test. Alternatively, Jenkins is used quite often to handle this construction phase.
Usually, when a building is finished, you want to send it to a test environment before going directly to production. Nevertheless, automation of distributions to both test and production servers will significantly accelerate iteration times. In the AWS pipeline, this is handled by CodeDeploy. Jenkins can also handle distribution and software such as Ansible.
Overall, a CI / CD pipeline can automate most of the DevOps flow, from building to distribution, making it an important part for any team that wants to work efficiently.