GitOps & CI/CD

What runs in production is what lives in Git.

No more manual deployments at three in the morning, no more configuration that exists only on one server. The desired state of your platform is described in a repository, reviewed like code, and applied automatically.

  • Every change reviewed and traced
  • Rollback with a single command
  • Reproducible environments
  • No undocumented configuration
One repo A single source of truth for infrastructure and deployments
Rollback Return to the previous state by reverting a commit
Audit Who changed what, when and why — at no extra effort

The problem GitOps solves

On manually managed infrastructure, the question “what exactly is running in production?” has no reliable answer. Someone edited a configuration file in a hurry eight months ago. An environment variable was adjusted during an incident and never recorded anywhere else. The documentation describes a system that no longer quite exists.

That gap between the documented system and the real one is where most long outages live. The day the server has to be rebuilt, nobody knows what is missing — and you find out in production.

GitOps removes the gap by construction: the Git repository describes the desired state, an agent continuously compares it with reality, and corrects the difference. What isn’t in Git doesn’t exist; what is changed by hand is detected and reverted.

What changes day to day

A deployment becomes a commit. It goes through a merge request, it gets reviewed, CI validates it. The deployment itself is no longer a craft operation performed by the only person who knows how.

A rollback becomes trivial. Going back to the previous state means reverting a commit. No rebuild to reconstruct from memory, no backup folder to hunt down, no dependency on whoever deployed it.

Auditing comes for free. Who changed what, when, with what justification and whose approval: the Git history answers, at no extra effort. It is also exactly what your auditors will ask for the day they ask.

Environments finally resemble each other. Staging is described by the same files as production, with different parameters. Bugs that “only happen in production” become the exception rather than the norm.

How we roll it out

We don’t impose a big-bang switch. The approach is incremental and always starts with an honest inventory of what exists: what runs, where, with what configuration, and what nobody can explain any more.

Then, in this order: existing configuration brought under Git, reproducible image builds, the continuous integration chain, and finally automated deployment — staging first, production after. Each step delivers value on its own and doesn’t require the next one to be worth doing.

And the tooling?

The choice of forge and reconciliation agent matters less than the discipline they make possible. We work with GitLab CI, Forgejo Actions and GitHub Actions for integration; Argo CD or Flux for Kubernetes reconciliation; Terraform, Ansible, Helm and Kustomize for describing infrastructure. If your team already knows one of these, we start from that one: the best CI/CD chain is the one your developers will actually use.

What we put in place

Continuous integration pipelines

Every contribution is checked automatically before it reaches the main branch. CI says no on your behalf, without argument and without forgetting.

  • Build, automated tests, static analysis and code quality
  • Detection of secrets committed by mistake
  • Vulnerability scanning of the images produced
  • Versioned images published to a private registry

Continuous delivery and reconciliation

An agent constantly compares the real state of the cluster with the state described in Git, and corrects the difference. A change made by hand is detected — and undone.

  • Argo CD or Flux, depending on your context
  • Controlled promotion from staging to production
  • Configuration drift detection
  • A complete history of deployed states

Infrastructure as code

Servers, networks, DNS, certificates, firewall rules: described in files, reviewed, versioned and replayable.

  • Terraform for provisioning
  • Ansible for system configuration
  • Helm and Kustomize for Kubernetes manifests
  • Staging environments identical to production

Controlled updates

Dependencies age quietly. We automate the tracking so that updating becomes routine rather than a project.

  • Renovate raises version bumps as merge requests
  • Tests run before anything is approved
  • Security fixes handled as a priority
  • Full traceability: changelog generated automatically
Frequently asked questions

GitOps: the questions that keep coming up

Is GitOps only for Kubernetes?
No. The principle — desired state described in Git, applied automatically — works just as well for Docker Compose or Swarm stacks deployed from a pipeline. Argo CD and Flux are Kubernetes tools, but the discipline applies at every scale, and we regularly apply it without Kubernetes.
We have no automated tests. Is that a blocker?
No, and it’s very common. We start with what delivers value immediately: reproducible builds, secret detection, vulnerability scanning, automated deployment. Functional tests come next, starting with the journeys whose failure would cost you the most.
Who keeps control of deployments?
You do. GitOps doesn’t mean everything ships to production automatically: promotion to production can require an explicit human approval. What changes is that the deployment itself becomes a safe, repeatable action.
How long does it take to set up?
For an application that is already containerised, a full CI/CD chain takes a few days. For an existing platform with several applications and undocumented configuration, the bulk of the work is the inventory — that’s where the time goes, and where the unpleasant surprises live.
What happens to our current Git forge?
We work with GitLab, GitHub, Forgejo or Gitea, whether self-hosted or SaaS. If you want to bring your forge in house, we can host and operate that too.

Let's talk about your infrastructure

Migration, redesign, taking over an existing setup or starting from scratch: tell us your context and we'll come back with a first technical opinion — no strings attached.