DevOps: One-Shot (Know the jargon)
A must read for aspiring Software Engineers!
What is DevOps and Why it came into the picture?
Imagine you have a group of developers responsible for the entire software development process, from UI/UX design to frontend and backend development, including full-stack engineers who contribute code to the version control system like GitHub or GitLab.
On the other side, you have Operations (Ops) team members who are responsible for managing the servers and infrastructure, including deploying the software builds created by the developers onto cloud platforms or other production environments.
Imagine a situation where a conflict arises between the development team and the operations team. The developers claim that the code works perfectly on their local machines, but when it's deployed to the cloud or production environment managed by the operations team, issues arise. On the other hand, the operations team denies responsibility, stating that the code they received is flawed.
In the past, this kind of situation often led to a "blame game" scenario, where developers and operations pointed fingers at each other, trying to determine who was at fault for the problem. This approach not only caused friction between the teams but also delayed the resolution of issues, leading to decreased productivity and customer dissatisfaction.
So DevOps arose to fix this problem by promoting transparency, effective communication, and automation, DevOps helps resolve conflicts more efficiently and ensures that the focus shifts from finding fault to solving problems collaboratively. This was done by what is called as "Software Development Lifecycle".
Software Development Lifecycle (♾️)
This is a continuous flow between development and operations, basically a blueprint for a DevOps engineer.
Planning (breaking into smaller pieces and assigning it out)
Code (Developers writing the code, building application & pushing to github/lab)
Building and Testing (also called CI, basically commiting code to git & runs the test on the build, it can be performance test, code test, bug test etc. )
CI stands for Continuous Integration, it allows developers to merge code into code branch anytimes/day, each merge triggers code build, i.e compiling and testing sequence and the goal is to produce artefact that is safe to deploy. This artefact can be binary, container or a website. It's making sure Version of code that i'm pushing is safe to deploy.
Release and Deployment (also called CD, a release of your code, usually handled manually by some team lead or manager which finally merges to main branch. )
In short CI/CD Pipeline (CI=build,test,produce artefact & CD=deployment)
Operate and Monitor (monitoring the application sending back valuable feedback)
And the loop goes on
CI/CD pipeline in detail
CI/CD pipelines have become a fundamental aspect of modern software development and are essential for agile development practices and DevOps culture.
A CI/CD pipeline is a set of automated processes and tools used in software development to ensure the Continuous Integration (CI) and Continuous Deployment (CD) of code changes to production or other target environments. The primary goal of a CI/CD pipeline is to streamline and automate the software delivery process, allowing developers to release changes more frequently and reliably.
Here's a breakdown of CI and CD within the context of a CI/CD pipeline:
Continuous Integration (CI): Continuous Integration refers to the practice of frequently integrating code changes from multiple developers into a shared repository, often several times a day. With CI, developers commit their code changes to a version control system (e.g., Git), and these changes are automatically verified by a CI server or build system. The CI server then builds and tests the code to detect integration issues, compile errors, or failing tests. This process helps identify and address issues early in the development cycle, promoting code stability and collaboration among developers.
Continuous Deployment (CD): Continuous Deployment is the next step after successful Continuous Integration. It involves the automated release and deployment of the code changes to the production environment or the target environment intended for users. In this stage, the CI/CD pipeline automatically deploys the code to staging or production servers after passing all the necessary tests in the CI phase. This automated deployment reduces the manual intervention required for the release process, which in turn minimizes the risk of human errors and enables faster, more frequent releases.
The CI/CD pipeline encompasses the entire process from code integration and testing (CI) to automated deployment (CD). This automation not only saves time and effort but also helps maintain a high level of software quality and reduces the chances of introducing bugs or issues during the deployment process.
So What is the job of a DevOps engineer in general?
Here are some of the primary responsibilities of DevOps professionals:
CI/CD Pipeline Development: DevOps engineers are involved in designing, implementing, and maintaining CI/CD pipelines. This includes writing the necessary scripts, configuring automation tools, and integrating various stages of the pipeline to facilitate continuous integration and continuous deployment of code changes.
Automation and Tooling: DevOps professionals focus on automating repetitive tasks, such as builds, tests, and deployments, to increase efficiency and reduce human errors. They identify and implement the right tools and technologies to streamline the development and operational processes.
Infrastructure as Code (IaC): DevOps engineers treat infrastructure as code, meaning they use code-based configurations to provision and manage infrastructure resources. This approach enables consistent, reproducible, and version-controlled infrastructure setups.
Monitoring and Logging: DevOps teams are responsible for setting up monitoring and logging systems to track the performance and health of applications and infrastructure. They use various monitoring tools to proactively identify and address issues.
Security and Compliance: DevOps professionals collaborate with security teams to implement security best practices throughout the development and deployment lifecycle. They ensure that applications and infrastructure are compliant with relevant regulations and standards.
Cloud Services and Orchestration: DevOps engineers work with cloud platforms like AWS, Azure, or Google Cloud, leveraging their services for scalability, elasticity, and automation. They also manage containerization platforms like Docker and orchestration tools like Kubernetes.
Release Management: DevOps plays a crucial role in coordinating and managing software releases, ensuring smooth and reliable deployments to different environments.
Collaboration and Communication: DevOps is all about breaking down silos between development and operations teams, fostering a culture of collaboration, and facilitating open communication between all stakeholders.
Continuous Improvement: DevOps professionals are continuously looking for ways to improve processes, enhance efficiency, and implement best practices in software development and operations.
How I would Learn DevOps from scratch? Cloud champ
Blogging the content by a DevOps engineer itself ft. Cloud Champ https://www.youtube.com/watch?v=EAXdnPWUCcc
Infrastructure (server, database, underline system and hardware responsible for software development and delievery)
Automation (automate the things you do manually e.g automate infrastructure by tools like Terraform)
Monitoring (Keeping track of how your application is working )
Linux (It's very important! you are in cloud)
Networking (DNS records, TCP/IP protocol and port, gateways, Subnetting etc.)
Virtualisation and OS (KVM,learn how to distribute resources, config OS on it)
Programming (Python/Go and its modules)
Git (Very Important)
Clouds (Aws/Gcp/Azure, prefer AWS provides Certifications too)
Infrastruce As Code (YAML or JSON, terraform)
Anisible
CI/CD (principles of ci/cd, different stages of pipelines i.e build test deploy)
Jenkins/GitLab (tools for ci/cd)
Docker & Containerisation
Kubernetees (Micro services)
Showcase your work/projects learnings (Learn in Public)
Soft Kills (communications, attend seminars, network, empathy)
Roadmap By Travis Media
https://www.youtube.com/watch?v=IiuWlqabx9M
Version control (git github)
Linux
Coding (Python,Go,JS)
Agile Development (sprint planning, daily standups, reports, after 2 weeks push everything out, see problems, what went wrong see new problems come in...) Also there is a "Scrum master" The Scrum Master's job is to facilitate the Scrum process, remove obstacles, and foster a collaborative and self-organizing environment within the Agile development team. (ggl for more)
Operations Side (Maintained, networking, etc..) get cloud Certified say AWS
Dockers (Works on my machine but doen't work on his machine, docker image solve this problem, build a container...)
Kubernetes (Container orchestration platform)
Infrastructure as Code i.e Terraform (all infrastructure in a YAML file)
Ansible (configuration management, other tools too.. dont get stuck in tools hell)
Jenkins ( it automate all testing phase by tools like selenia etc. it's ci/cd)
Aws cloud computing
Monitoring
All the roadmaps are kinda similar just listening to different people, to be sure that I'm on the right path and get a bigger picture of a field in which I have zilch knowledge... It's the Same, follow the fundamentals, by now you must have got an idea of how to approach for DevOps!
Now Comes DevOps Roadmap by Saiyam Pathak
You can also check this roadmap in which saiyam sir has explained all the path with the resources too, but you got the idea so now stop going for roadmaps and start learning! https://www.youtube.com/watch?v=4yRAeXAAHtM
Extra: Chart Roadmaps by https://roadmap.sh/roadmaps