Fast Dev, Safe Prod: A GitOps Journey with ArgoCD

Building a hybrid deployment pipeline that balances development speed with production stability

Community Gaming Logo

The Challenge

As Community Gaming's platform grew rapidly, their deployment process wasn't keeping up with their ambitions.

  • The need for rapid iteration in development environments
  • The requirement for rock-solid stability in production

They needed a solution that could satisfy both worlds - the speed on development environments and the safety on production environment.

Our Approach

While we're creating a solution we initially refactored all the development pipeline. We reimagined their entire deployment workflow around GitOps principles with ArgoCD. We created a single, well-organized repository that became the source of truth for all deployments. Think of it as a mirror of their Kubernetes cluster - each environment had its own dedicated folder, with namespaces grouped into subfolders, making it instantly clear where everything lived and how it was configured. This was necessary because they had a lot of services and each service had its own deployment process.

GitOps Repository Structure

A Tale of Two Workflows

For dev environments, we set up automatic deployments using Keel.sh and static image tags. The workflow is simple: when developers push code, CircleCI builds the image and pushes it to ECR. Keel then detects the new image and automatically updates the Kubernetes deployment. This eliminated manual deployment steps and let developers stay focused on coding instead of managing infrastructure.

Development vs Production Workflows

For production, we implemented strict manual controls instead of auto-syncing. The deployment process uses tagged container images with a version numbering system. Each deployment requires:

  • Push the version update to the GitOps repo
  • Manually approve the sync in ArgoCD

This gives ops teams time to review changes and maintains a clear audit log of all production deployments.

The Power of Simplicity

This architecture brought several key advantages:

  • A self-documenting infrastructure where anyone could understand the deployment state at a glance
  • Automated deployments that triggered the moment code was pushed
  • A consistent environment state that eliminated the "it works on my machine" syndrome
  • The ability to roll back changes with confidence when needed
  • A complete audit trail that tracked every change, big or small

Development Environment Automation

For development environments, we implemented Keel.sh with untagged images to enable rapid deployment cycles. This setup automatically pulls new container images from AWS ECR as soon as CircleCI completes the build process, eliminating manual intervention in the development pipeline.

  • Instant deployments triggered by new image detection in ECR
  • Automated pull policy for untagged images in development
  • Seamless integration between CircleCI builds and Kubernetes deployments

Production Safeguards

In production, we enforced a strict tagged image policy to ensure deployment stability and enable version control. This approach provides:

  • Version-controlled deployments using tagged container images
  • Reliable rollback capabilities for production incidents
  • Clear audit trail of all production deployments

Technologies Used

  • ArgoCD for GitOps workflows
  • Kubernetes for container orchestration
  • Helm for package management
  • CircleCI for CI/CD
  • Keel.sh for automated image pulling

The Results

After implementing the new workflow:

  • Deployment time reduced by 80%
  • Easy rollbacks on production
  • Improved developer productivity
  • Better visibility into deployment status

Want to Implement Something Similar?

Whether you're looking to implement a similar hybrid deployment strategy or have questions about GitOps implementation, we're here to help. Our team has extensive experience in building and optimizing deployment pipelines across various scales and requirements.

Get in touch to discuss your deployment needs →