Last year, we wrote a blog post about the long-term benefits of DevOps which included the quicker deployment of systems, platforms and apps; improved customer service through continuous delivery; and instant solutions to system errors, to name just a few. DevOps permeates our work here at 10Clouds, enabling us to efficiently deliver products to our clients. We wanted to share with you the seven DevOps tools that support our work in the hope that they might be helpful to you too.
1. Git
What is it? Git is a distributed version-control system for tracking changes in any set of files, originally designed for coordinating work among programmers cooperating on source code during software development
Why is it useful? Git is used for maintaining historical and current versions of source code. It provides each of your developers with a shared workspace, sending out notifications when their fellow developers make changes to the same project files. It enables everyone who is working on the project to get an easy visualisation of its current status.
Git is essential when it comes to code management - collaborators deliver their work to the shared repository. The code is then extracted to perform continuous integration. It can then be thoroughly tested and deployed in the products.
2. Jenkins
What is it? Jenkins is a continuous integration (CI) and continuous delivery (CD) solution. Jenkins is used to build and test development projects in a continuous manner, making it easier for developers to integrate changes to it and delivering the latest, fresh build to users.
Why is it useful? Jenkins is predominantly used for efficiency and as a means of speeding up the development process through the use of automation. It integrates lots of different elements of the development life-cycle, including software building, testing, packaging, staging, deployment, static analysis and others.
3. Docker
What is it? Docker is an open platform for developing, shipping, and running applications. It allows you to detatch your applications from your infrastructure so you can deliver software quickly.
Why is it useful? A Docker container image is a lightweight, standalone, executable package of software. It includes all of the essentials that you need to run an application, which includes: code, runtime, system tools, system libraries and settings. These Docker containers separate software from its environment for the purpose of ensuring that it performs uniformly regardless of differences, e.g those between development and staging.
4. Kubernetes
What is it? Kubernetes is “a portable, extensible, open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation.”
Why is it useful? Kubernetes automates the process of scaling, managing, updating and removing containers. In doing so, it provides developers with a framework to run distributed systems resiliently. It takes care of scaling and failover for applications, provides deployment patterns, and more.
A note about the symbiosis between Docker and Kubernetes: Contrary to popular belief, Docker is not an alternative to Kubernetes - actually, the opposite is true. One can run without the other, but each vastly benefits from integration with the other.
It’s also worth noting that Kubernetes is cloud agnostic. It allows you to migrate your workload easily between cloud providers. It also supports the Function as a Service concept (i.e. knative, kubeless).
5. Ansible
What is it? Ansible describes itself as simple IT automation. It allows you to drive automation across open hybrid cloud deployments.
Why is it useful? Ansible lets you quickly and easily deploy multi tier apps and to generally provision resources with tools, libraries, code artefacts and configurations. The best part is that there is no need to write custom code to automate your systems. Instead what you do is to create a PlayBook detailing the tasks required to be done, and Ansible will work through it, figuring out how to get your systems to the right state. This means that you don’t even need to be aware of the specific commands used to accomplish a particular task!
6. Cloud CLI
What is it? Cloud CLI is essentially a set of tools which help you manage actions in the Cloud. They include: aws-cli, az-cli (Azure), gcloud (Google).
Why is it useful? Cloud specific cli is your way to talk to your cloud resources. cli allows you to provision and control resources.
Each CLI tool reflects the ethos of its cloud. The AWS CLI control multiple AWS services from the command line and automate them through scripts. The Azure CLI is simple to get started with, has broad coverage and is well documented. And the Google Cloud CLI is clean, well-integrated, and constantly evolving. It’s worth checking them all out (of course depending on what you happen to be working on.
7. Infrastructure as code
Infrastructure as code is essentially applying the same principles both for software infrastructure and software code. If you treat your infrastructure as a piece of code, it means that you:
- Define your infrastructure in text files
- Store it in a version control system
- Test and provision it with an automated process
Being a software house, we work on many projects using similar technology stacks, so the initial setup looks very similar every time. By approaching infrastructure just like code, a lot of blocks can be defined just once and then reused in many different projects. This comes in handy not only because it saves time, but also because it helps enforce good practices for server provisioning and management. Essentially, you are able to create many environments from one code template (often referred to as the ‘reusability of infra code.’) Finally, but importantly, infrastructure as code is particularly handy when it comes to disaster recovery.
And there you have it! A toolstack for DevOps, bringing greater efficiency and effectiveness to your development. Note that this is by no means a complete list, but it should form the bones of the systems that you’re looking to build. Good luck!