What is GitOps, and why should I learn it?
Less configuration drift, faster software delivery, enforced access control and encryption of code: the benefits of implementing (and learning) GitOps are many.
Jul 25, 2023 • 7 Minute Read
- IT Ops
- Software Development
- Engineering Leadership
- Developer Experience
- Software Delivery Process
In recent years, there has been significant shifts in the world of software development and deployment. One major change is the explosive growth of GitOps, a framework which has completely transformed how today’s organizations manage their software systems.
If you’re not yet familiar with GitOps, you’ve come to the right place. In this post, I will demystify what GitOps is, including its core principles and the benefits of both learning and using it. Additionally, I’ll share how you can get started with GitOps, including important tools and frameworks you can use.
GitOps refers to a set of practices and tools that rely on Git as the central source of truth for managing software applications and infrastructure. It serves as a cloud-native pattern for deploying both infrastructure and applications. Although commonly associated with Kubernetes deployments, GitOps can actually be applied to various platforms, including cloud environments.
GitOps: Bringing the best of two worlds together
As you might suspect, GitOps is a portmanteau of Git and Ops. The term was first coined by Alexis Richardson, the CEO of Weaveworks, in 2017. He conceptualized GitOps as a way to combine the best practices of both.
- Git is a distributed version control system that allows developers to track changes in their code and collaborate with others. Git enables developers to create branches, merge changes, resolve conflicts, and revert to previous versions of their code. Git also supports various workflows and tools that facilitate code review, testing, integration, and deployment.
- Ops is shorthand for operations, which refers to the tasks and processes involved in running and maintaining software systems. Ops includes activities such as provisioning, configuring, monitoring, scaling, updating, securing, and troubleshooting software applications and infrastructure.
How Git complements Ops
GitOps is a way of applying Git's features and workflows to Ops.
- GitOps uses Git as the single source of truth for both the code and the configuration of software systems.
- GitOps uses Git's branching and merging mechanisms to enable declarative and automated deployment of software systems.
GitOps aims to automate and simplify the deployment and operation of software systems by applying the principles of version control, collaboration, and continuous delivery to the entire software lifecycle.
Let’s further explore GitOps key principles.
The key principles of GitOps
GitOps treats infrastructure as code. It defines the desired state of the system using declarative configuration files stored in a Git repository. This approach ensures consistency, repeatability, and allows for easy rollbacks.
2. Versioned and Immutable
Git acts as the single source of truth for both the application code and the infrastructure code. All changes to the system are made through pull requests and merge workflows, providing a transparent audit trail, and enabling collaborative development.
3. Pulled Automatically
GitOps embraces the concept of continuous deployment. This is powered by software agents known as GitOps operators automatically pulling the desired state declarations from the source. Any changes committed to the Git repository trigger an automated pipeline that builds, tests, and deploys the application. This ensures that the software is always in a deployable state.
4. Continuously Reconciled
GitOps promotes automation for operations tasks. With Git as the control plane, the desired state of the system is continuously reconciled with the actual state, and any divergence is automatically rectified. This automation reduces human errors and makes operations more efficient.
What are the benefits of GitOps for developers and operators?
- Increased reliability: By using Git as the single source of truth, you can ensure consistency and avoid configuration drift between your code and your infrastructure. You can also reduce human errors and manual interventions by automating the deployment process.
- Faster delivery: By using Git's branching and merging features, you can enable continuous delivery of your software system. You can also accelerate feedback loops and iterate faster by using pull requests and code reviews.
- Improved collaboration: By using Git's collaboration features, you can enable better communication and coordination between developers and operators. You can also foster a culture of transparency and accountability by using Git's history and audit trail features.
- Enhanced security: By using Git's security features, you can enforce access control and encryption for your code and configuration files. You can also use Git's validation and verification features to ensure compliance and quality standards.
How GitOps works
Let’s explore how GitOps works. Here is a breakdown of the steps involved with GitOps:
Define the desired state of your software system in a declarative way using configuration files or manifests. These files describe what resources you want to deploy (such as containers, pods, services, etc.) and how you want them to behave (such as replicas, labels, selectors, etc.).
Store these configuration files in a Git repository that is accessible by both developers and operators. This repository acts as the single source of truth for your software system.
Use a GitOps tool such as a GitOps operator or agent that continuously monitors the Git repository for changes and synchronizes the actual state of your software system with the desired state defined in the repository. This tool or agent can also perform validation, testing, and verification before applying the changes.
Use Git's branching and merging features to create different environments (such as development, staging, production, etc.) and manage changes across them. You can also use pull requests and code reviews to ensure quality and compliance before merging changes to the main branch.
Use Git's history and audit trail features to track and trace every change that happens to your software system. You can also use Git's revert and rollback features to undo any unwanted or erroneous changes.
Here is a sample diagram to give you a visual idea about what GitOps is and how it works:
What you need to get started with GitOps
For you to get started with GitOps, you will need the following:
- A Git repository that contains your code and configuration files for your software system.
- A GitOps Operator or agent that can monitor your repository and synchronize your software system with it.
- A Kubernetes cluster or another platform such as cloud that can run your infrastructure and or applications.
GitOps tools and frameworks
There are various tools and frameworks that can help you implement GitOps in your environment. Some of the tools are:
Flux: A GitOps operator that automates the deployment of Kubernetes resources from a Git repository.
Argo CD: A GitOps operator that provides declarative continuous delivery for Kubernetes applications from a Git repository. This operator has a rich visual approach.
Atlantis: GitOps for cloud via Terraform. Atlantis is an application for automating Terraform via pull requests.
Jenkins X: A full Kubernetes CI/CD tool with a built-in GitOps operator that provides cloud-native continuous delivery for Kubernetes applications using GitOps principles.
GitOps is transforming the software development and operations landscape by providing a streamlined, automated, and collaborative approach to managing the entire software lifecycle. By learning GitOps, you can take advantage of the benefits it offers, such as improved collaboration, traceability, stability, scalability, and faster recovery.
Embracing GitOps empowers organizations to build and deploy robust, scalable applications with increased efficiency and agility, ultimately enhancing their competitiveness in today's fast-paced digital world.
Further GitOps resources for you to explore
OpenGitOps is a set of vendor-neutra standards, best practices, guidence, and education that companies and individuals to can utilize for assisting them with implementing GitOps. OpenGitOps is curated by the GitOps Working Group. The GitOps working group is a committee of folks from many companies and the open source community that have a common interest in setting a community-focused, structured, and standardized approach for GitOps. You can check out the GitOps Working Group and OpenGitOps project on GitHub.
GitOps Certifications by the Linux Foundation
GitOps Certifications by Codefresh
- GitOps Fundamentals
- GitOps at Scale
- GitOps at Edge