Cache Layers

Avoiding Stale Builds with Kaniko and Container Registry Caching

A blog post was committed and pushed, CI built and pushed the image, but the deployed site showed old content. This post documents the debugging process and the fixes to prevent stale builds. The Problem After pushing a new blog post: GitLab CI pipeline succeeded Kaniko pushed the image to Harbor ArgoCD deployed the new image The blog showed old content - new post missing Root Causes Two caching layers caused the issue: ...

January 18, 2026 · 4 min · Will
GitLab Runner on Kubernetes

In-Cluster GitLab Runner with Kubernetes Executor

This post covers deploying a GitLab Runner inside a Kubernetes cluster using the Kubernetes executor. Each CI job spawns as a pod, runs its tasks, and is automatically cleaned up. Docker builds use Kaniko (rootless, no privileged containers), and job artifacts/dependencies are cached in MinIO. Architecture ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ GitLab CI Job │────▶│ Runner Manager │────▶│ Job Pod │ │ (push to repo) │ │ (polycephala) │ │ (auto-created) │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ ┌──────────────────┐ │ │ MinIO Cache │◀─────────────┘ │ (shared deps) │ └──────────────────┘ The runner manager pod runs continuously and polls GitLab for jobs. When a job is picked up, it creates a new pod in the gitlab-runner namespace, executes the job, and deletes the pod when complete. ...

January 3, 2026 · 6 min · Will
ArgoCD GitOps

GitOps Blog Deployment with ArgoCD and Automatic Image Updates

I run a Hugo blog on my homelab Kubernetes cluster, and I wanted a proper GitOps workflow where pushing to main automatically deploys changes. No manual kubectl apply, no SSH-ing into servers, no scripts to remember. Just git push and walk away. This post covers how I set up ArgoCD to deploy this blog with automatic image updates using the ArgoCD Image Updater. The Goal ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ ┌─────────────┐ │ Git Push │────▶│ GitLab CI │────▶│ Container │────▶│ ArgoCD │ │ (main) │ │ (build) │ │ Registry │ │ (deploy) │ └─────────────┘ └─────────────┘ └─────────────────┘ └─────────────┘ │ │ │ │ │ ▼ │ │ ┌───────────────┐ │ └─────────────▶│ Image Updater │ │ │ (detect new) │ ▼ └───────────────┘ Tags image with │ git SHA (d67fe5d) ▼ ┌───────────────┐ │ Kubernetes │ │ (updated) │ └───────────────┘ The workflow: ...

December 29, 2025 · 6 min · Will