A fully automated GitOps + Infrastructure-as-Code pipeline that deploys a Go backend to Kubernetes using Helm and ArgoCD, provisioned via Terraform.
This project demonstrates a complete DevOps workflow:
Terraform → Kubernetes → ArgoCD → Helm → Application
- Infrastructure is provisioned using Terraform
- ArgoCD is installed via Helm (through Terraform)
- Application is deployed using GitOps principles
- Every Git push automatically triggers a deployment
- Go (Backend Service)
- Docker (Containerization)
- Kubernetes (Orchestration)
- Helm (Packaging)
- ArgoCD (GitOps Continuous Delivery)
- Terraform (Infrastructure as Code)
gitops-engine/
│
├── app/ # Go backend + Dockerfile
├── k8s/ # Raw Kubernetes manifests (initial)
├── gitops-chart/ # Helm chart for the app
├── terraform/ # Terraform configs (ArgoCD + infra)
└── README.md
- Developer pushes code to GitHub
- ArgoCD detects changes in repo
- Helm chart is re-applied
- Kubernetes updates the deployment
- New version goes live automatically
git clone https://github.com/cotishq/gitops-engine
cd gitops-engine/terraformterraform init
terraform applyThis will:
- Create Kubernetes resources
- Install ArgoCD
- Deploy the application automatically
kubectl port-forward svc/argocd-server -n argocd 9091:80Open:
http://localhost:9091
Get password:
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -dkubectl port-forward svc/gitops-service 9090:80 -n gitopsOpen:
http://localhost:9090
Update the app version:
tag: v2Then:
docker build -t cotishq/gitops-engine:v2 ./app
docker push cotishq/gitops-engine:v2
git commit -am "update version"
git pushArgoCD will automatically sync and deploy the new version.
+-------------------+
| Terraform |
+--------+----------+
|
v
+-------------------+
| Kubernetes |
+--------+----------+
|
v
+-------------------+
| ArgoCD |
+--------+----------+
|
v
+-------------------+
| Helm |
+--------+----------+
|
v
+-------------------+
| Go Application |
+-------------------+
- Fully automated deployments via GitOps
- Infrastructure managed with Terraform
- Helm-based application packaging
- Self-healing and auto-sync via ArgoCD
- Versioned container deployments
- Terraform provisioning for AWS EKS
- Ingress for public access
- Monitoring (Prometheus + Grafana)
- Handling Kubernetes resource conflicts (CRDs, ClusterRoles)
- Managing state between Terraform and Helm
- Debugging ArgoCD sync issues
- Implementing real-world GitOps workflows