TYPE:Personal Lab
Personal Lab2025

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.

ROLE: DevOps Engineer
ORGANIZATION: Personal
PERIOD: 2025

// ARCHITECTURE_TOPOLOGY

// LOADING_MERMAID_DIAGRAM...

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.

// TECHNOLOGY_STACK

CI/CDGitLab CI/CDGitLab RunnerMavenKubernetesMinikubeHelmDockerDocker HubMySQLNGINX IngressLinux
SOURCE: PRIVATE_REPOSITORY