PIPELINE PROGRESS

CHECKING...

DEPLOYED VERSION

---

PIPELINE STAGES

---
Loading stages...

SYSTEM SIGNALS

JENKINS CHECKING
ARGOCD CHECKING
SYNC CHECKING

BUILD HISTORY

Loading history...

ABOUT THIS PROJECT

A fully automated CI/CD platform on bare metal Kubernetes. Cloud credits ran out, but the constraints forced deeper learning - when you can't throw money at managed services, you actually understand what's running.

INFRASTRUCTURE

  • Jenkins on K8s with ephemeral BuildKit agents (spin up per build, auto-terminate)
  • Jenkins fully governed by Helm + JCasC - plugins, jobs, cloud config, everything is version controlled. Lose the pod? Helm redeploys identical state.
  • ArgoCD for GitOps - git push triggers automatic deployment
  • All credentials managed via Kubernetes Secrets
  • Self-healing through K8s with proper namespace isolation

THE HARD PROBLEMS SOLVED

  • Jenkins K8s plugin strictness - pod templates silently fail with wrong YAML structure, inheritFrom falls back to empty templates without warning
  • Duplicate Kubernetes clouds - Helm injected a default cloud that conflicted with JCasC config, causing non-deterministic agent failures
  • WebSocket vs TCP agent mismatch - agents failing to connect until protocol was aligned
  • BuildKit running privileged (rootless deferred) - made deliberate tradeoff to prioritize delivery over security hardening in phase 1
  • Webhook loop prevention - Jenkins commits triggering infinite builds, solved with fast abort on controller before spinning up K8s pods

PIPELINE FLOW

GitHub Push Jenkins Build Docker Image ArgoCD Sync K8s Deploy

Commits to GitHub trigger Jenkins. Jenkins builds and pushes a Docker image, then updates the K8s manifest. ArgoCD detects the change and syncs the deployment.

SYSTEM SIGNALS

  • JENKINS - CI server health
  • ARGOCD - GitOps controller health
  • SYNC - ArgoCD sync state (deployed matches git)

TRIGGER BUILD

Clicking "Trigger New Build" bumps the VERSION file in GitHub, which triggers the Jenkins webhook and starts a new pipeline run.