End-to-End GitLab CI/CD with Kubernetes and Helm
Built an end-to-end GitLab CI/CD pipeline to package a Java application, create versioned Docker images, and deploy releases to a local Kubernetes environment using Helm.
// ARCHITECTURE_TOPOLOGY
Problem Statement & Context
Build a complete automated delivery workflow for a Java application, covering application packaging, container image versioning, registry publishing, and repeatable deployment to Kubernetes using Helm.
Solution & Delivery Approach
Configured a GitLab CI/CD pipeline using a local Shell Runner to package the Java application with Maven, build a Docker image, and assign a dynamic tag using the commit date and short commit SHA. Published the versioned image to Docker Hub and deployed it to a local Minikube cluster using a custom Helm chart with environment-specific values.
Engineering Challenges & Resolution
Resolved pipeline access to the local Minikube cluster by configuring a dedicated kubeconfig for the GitLab Runner. Troubleshot duplicate Kubernetes Ingress resources caused by overlapping Helm templates and standardized the chart structure to ensure consistent deployments.
// Key_OUTCOMES
- ✓Established a complete automated workflow from source-code commit to a running application in Kubernetes.
- ✓Improved release traceability through unique, commit-based Docker image tags.
- ✓Standardized Kubernetes application deployment through a reusable and configurable Helm chart.
- ✓Successfully integrated GitLab Runner, Docker Hub, Helm, Minikube, Ingress, and application health checks in one delivery workflow.
// RESPONSIBILITIES
- >Created GitLab CI/CD stages for Maven packaging, Docker image creation, Kubernetes deployment, and post-pipeline cleanup.
- >Implemented dynamic Docker image versioning using the commit date and short commit SHA to provide traceable releases.
- >Published versioned container images to Docker Hub and passed the same image tag into the Helm deployment.
- >Developed a custom Helm chart with parameterized values, ConfigMaps, Secrets, application services, Ingress, and Kubernetes health probes.
- >Configured GitLab Runner access to the local Minikube cluster using a dedicated kubeconfig.
- >Integrated the application with MySQL and used an init container to wait for database availability before application startup.
- >Validated the deployed application through Kubernetes Ingress at app.local.