# Introduction to DevOps

> 🔗 Jump to other notes here
>
> * [DevOps Resources](/home/devops-everything/devops-resources.md)
> * [Ansible](/home/devops-everything/devops-resources/ansible.md)
> * [Docker](/home/devops-everything/devops-resources/docker.md)
> * [Git](/home/devops-everything/devops-resources/git.md)
> * [Kubernetes](/home/devops-everything/devops-resources/kubernetes.md)
> * [Terraform](/home/devops-everything/devops-resources/terraform.md)
> * [Vim](/home/devops-everything/devops-resources/vim.md)

***

![](/files/jdfWEynyGcHh7qzsGpxr)

**DevOps Pipeline**

Test ➡️ Build ➡️ Deploy ➡️ Configure ➡️ Monitor

DevOps engineers have some know-how from both *DEV* and *OPERATIONs* teams, plus additional DevOps specific technical skills, the core one being building **CI/CD** (Continuous Integration / Continuous Delivery-Deployment) **pipelines**.

## Software Development

Methodologies of software development:

* Waterfall
* [Agile](https://asana.com/resources/agile-methodology) (newer)
  * several project phases
  * each feature is tested, deployed
  * fast development, testing and deployment cycles
  * Continuous Integration, Continuous Delivery
  * it supports the need for DevOps tasks (best practices, automation tools ...)

![](/files/jT8TaaSaMm9rqQKUdUKo)

The DevOps engineer needs to assist developers in building the application. This involves configuring automation tools (**CI/CD Pipelines**) to handle tests, build processes, and packaging the applications into Docker images. Finally, the DevOps engineer ensures the app runs smoothly on deployment servers.

**Artifacts** are apps built into a single file (`jar`, `war`, `zip`, `tar`, etc). An **artifact repository** can store many different artifact formats by using a manager for managing them all.

* [Nexus](https://help.sonatype.com/en/sonatype-nexus-repository.html) - private/internal usage
  * multi-format support
  * LDAP integration, user token support
  * REST API integration
  * Backup, restore
  * Tagging
  * Cleanup policies
  * Search functionality
* [Maven Repository](https://mvnrepository.com/) - public (Java)
* [npm](https://www.npmjs.com/) - public (Javascript)

### Software Versioning

> * [Semantic Versioning](https://semver.org/)
> * [jubianchi.github.io/semver-check/#/](https://jubianchi.github.io/semver-check/#/)
> * [Semver cheatsheet - devhints.io](https://devhints.io/semver)

**Major Version**

* Indicates big changes
* Usually involves breaking changes
* NOT backward-compatible.
* Incompatible API changes are made

**Minor Version**

* Introduces new but backward-compatible changes
* May include new API features
* Does not break existing functionality

**Patch Version**

* Contains minor changes and bug fixes
* Does not alter the API

***

## IaaS

**Infrastructure as a Service** (IaaS) offers compute, storage and networking on-demand from the cloud providers.

**Cloud computing** refers to the **delivery of computing services** (servers, storage, databases, networking, software, and more) over the internet, allowing users to access and utilize these resources on-demand.

***

## 🪛 Linux Tools

> I'm using [Ubuntu Desktop LTS](https://ubuntu.com/download/desktop) as Linux distro and `zsh` as default SHELL
>
> The install commands of the following tools can be found on my notes here - [Ubuntu VM - DevOps Tools](/home/operating-systems/linux/distros/ubuntu-vm.md#devops-tools)

* Package Manager - `apt` for Debian/Ubuntu-based Linux distros
* [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) (for Github, GitLab, etc)
* [java - OpenJDK](https://itsfoss.com/install-java-ubuntu/)
* [Node.js - npm](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04#option-1-installing-node-js-with-apt-from-the-default-repositories)
* [VScode](https://code.visualstudio.com/docs/setup/linux#_debian-and-ubuntu-based-distributions)
* [PyCharm](https://www.jetbrains.com/help/pycharm/installation-guide.html#standalone)
* [Maven](https://maven.apache.org/install.html) (if necessary)
* [Gradle](https://gradle.org/install/) (if necessary)
* [Docker](https://docs.docker.com/engine/install/ubuntu/)
* [k9s](https://k9scli.io/topics/install/) / [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-using-native-package-management)
* [minikube](https://minikube.sigs.k8s.io/docs/start/)
* [Helm](https://helm.sh/docs/intro/install/)
* [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
* [Ansible](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing-ansible-on-specific-operating-systems)
* [Azure Cli](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli)
* [gcloud CLI](https://cloud.google.com/sdk/docs/install#deb) + [GCP gke-gcloud-auth-plugin](https://cloud.google.com/blog/products/containers-kubernetes/kubectl-auth-changes-in-gke)

***

## CI/CD Tools

> [CI/CD](https://about.gitlab.com/topics/ci-cd/) - **Continuous Integration** / **Continuous Delivery**, pipeline
>
> [20 Best CI/CD Tools for 2024 - The CTO Club](https://thectoclub.com/tools/best-ci-cd-tools/)
>
> 📌 [List of Continuous Integration services | awesome-ci](https://ligurio.github.io/awesome-ci/)

* [Github Actions](https://github.com/features/actions)
* [Gitlab CI/CD](https://docs.gitlab.com/ee/ci/)
* [Jenkins](https://www.jenkins.io/)
* [Travis CI](https://www.travis-ci.com/)
* [CircleCI](https://circleci.com/)
* [SemaphoreCI](https://semaphoreci.com/)
* [AppVeyor](https://www.appveyor.com/)
* [Bamboo (Altassian)](https://www.atlassian.com/software/bamboo)
* [Argo CD](https://argoproj.github.io/cd/)
* [Harness](https://www.harness.io/)
* [Flux](https://fluxcd.io/)
* [Agola](https://github.com/agola-io/agola)
* [Buildkite](https://buildkite.com/)
* [GoCD](https://github.com/gocd/gocd)
* [Octopus Deploy](https://octopus.com/)
* [TeamCity](https://www.jetbrains.com/teamcity/)

***

## Containerization

Containers ➡️ Image for every server, separate instances

* [Docker](https://www.docker.com/) - `Dockerfile`

***

## Orchestration

* [Kubernetes](https://kubernetes.io/) (**K8s**) - *automatic deployment, scaling, and management of containerized applications*

***

## Infrastructure Provisioning

* [Terraform](https://www.terraform.io/) - *infrastructure automation to provision and manage resources in any cloud or data center*
  * Infrastructure as Code (**IaC**)
* [Ansible](https://www.ansible.com/) - *automates provisioning, configuration management, application deployment, orchestration, and many other IT processes* - more for automation post configuration

***

## Monitoring

* [Prometheus](https://prometheus.io/) - *systems and service monitoring system*
* [Grafana](https://grafana.com/) - visualize data

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.syselement.com/home/devops-everything/devops-resources/intro-devops.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
