DevOps is a set of practices that combines software development (Dev) and IT operations (Ops). It aims to shorten the systems development life cycle and provide continuous delivery with high software quality. DevOps is complementary with Agile software development; several DevOps aspects came from Agile methodology.
Other than it being a cross-functional combination of the terms and concepts for "development" and "operations," academics and practitioners have not developed a unique definition for the term "DevOps".
From an academic perspective, Len Bass, Ingo Weber, and Liming Zhu—three computer science researchers from the CSIRO and the Software Engineering Institute—suggested defining DevOps as "a set of practices intended to reduce the time between committing a change to a system and the change being placed into normal production, while ensuring high quality".
The term DevOps, however, has been used in multiple contexts
DevOps automation can be achieved by repackaging platforms, systems, and applications into reusable building blocks, through the use of technologies such as virtual machines and containerization(which enable microservices).
Implementation of DevOps automation in the IT-organization is heavily dependent on tools, which are required[citation needed] to cover different areas of the systems development lifecycle (SDLC):
IaC is the process of managing and provisioning computer data centers through machine-readable definition files, rather than physical hardware configuration or interactive configuration tools. The IT infrastructure managed by this process comprises both physical equipment, such as bare-metal servers, as well as virtual machines, and associated configuration resources. The definitions may be in a version control system. It can use either scripts or declarative definitions, rather than manual processes, but the term is more often used to promote declarative approaches.
It has delivered a much more reliable and flexible approach to scripting or the manual setup of a VM or container. Automation has also significantly removed the potential for human error when configuring the server. While at the same time, delivering the ability to easily redeploy an IaC system which makes it easy to reuse and refine further over time.
CI is intended to be used in combination with automated unit tests written through the practices of test-driven development. This is done by running and passing all unit tests in the developer's local environment before committing to the mainline. This helps avoid one developer's work-in-progress breaking another developer's copy. Where necessary, partially complete features can be disabled before committing, using feature toggles for instance.
CD is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time and, when releasing the software, doing so manually. It aims at building, testing, and releasing software with greater speed and frequency. The approach helps reduce the cost, time, and risk of delivering changes by allowing for more incremental updates to applications in production. A straightforward and repeatable deployment process is important for continuous delivery.
Continuous delivery is enabled through the deployment pipeline. The purpose of the deployment pipeline has three components: visibility, feedback, and continually deploy.
On this DevOps journey we will be using multiple tools that allow us to work fully in our devops landscape like the following:
Some categories are more essential in a DevOps toolchain than others; especially continuous integration (e.g. Jenkins, Gitlab, Bitbucket pipelines) and infrastructure as code (e.g., Terraform, Ansible, Puppet).
Some research shows that in IT performance is strongly correlated with DevOps practices like source code management and continuous delivery.
If you have not DNS, there's no problem as you can locally host all your apps to menaingful names using dns tools like:
For our example we will be using nip.io to access our services if they are hosted locally on ip 10.0.1.12 port 9090
then we can access the service on our browser with just:
http://service.10.0.1.12.nip.io:9090/
As simple as that.