GitOps delivery for a cloud product
The product runs as containers on an RKE2 cluster used as R&D's test environment. After a merge, GitLab CI builds images and updates a deploy repo; ArgoCD syncs the cluster. Nobody logs in to a host.
Two-stage pipeline
Service repos build; a deploy repo updates and syncs, chained as a downstream pipeline.
- service repo · build
- Maven
- Go
- static front-end
- nginx config check
- service repo · image
- docker build
- push → Harbor
- trigger
- trigger deploy repo
- deploy repo · update
- validate
- bump image tag
- commit [skip ci]
- deploy repo · sync
- wait-sync
The cluster follows Git; history doubles as the deploy log
Manual drift is reverted automatically
Deleting from Git never deletes cluster objects by accident
My scope
Owner of the platform and deploy flow: RKE2, Longhorn, Envoy Gateway, the deploy repo, ArgoCD and its notifications, GitLab Runners, Harbor, the nginx proxy config and its CI gate, and per-team dashboards. Application features and production release decisions are out of my scope.
Approach
- Two-stage pipeline: service repos build and push images to Harbor, then trigger the deploy repo, which bumps image tags (commits marked [skip ci] to avoid loops).
- ArgoCD treats Git as the single source of truth; selfHeal reverts manual drift, prune is off so deletions need a human.
- Ingress traffic and TLS are handled with Envoy Gateway (Gateway API).
Verification
ArgoCD reports every app Synced/Healthy; every deploy leaves a traceable commit in the deploy repo.
Results
| Metric | Value | Source | Evidence |
|---|---|---|---|
| Automated deploys | median ~33 per month | Deploy-repo bot commits, Mar–Oct 2026 | System record |
| Related hours | 362 h | Timesheets, Oct 2024 – Aug 2026 | System record |
| Logged hours split: me / AI execution | me ≈175 h, AI execution ≈187 h (hours before 2025-02-22 count as mine) | Own estimate; hours since 2025-02-22 split by the period’s ratio; company-logged hours only | Own estimate |
Limits and next steps
This flow serves the R&D test environment; production deployment, secrets and network-layer settings are outside my scope.
Tools
- GitLab CI
- Harbor
- ArgoCD
- RKE2
- Envoy Gateway
- Longhorn
- nginx