flight-reservation-devops: The Repo That Turns Jenkins Into a GitOps Trigger

A flight booking app is the excuse. The real lesson is how CI, Git, Kubernetes, and Argo CD split responsibility into a clean, auditable release pipeline.

9 min read • View on GitHub • More from prajwalpatil07

A wide editorial scene of a DevOps release path on a white background. On the left, a Jenkins pipeline hands a Git commit baton into a Kubernetes manifest, and on the right Argo CD watches the repo and rolls the change into a private cluster. It explains that Git is the control point, not a deployment script.
The repo's core trick is not faster deployment. It is moving deployment intent into Git, where Argo CD can reconcile it.
Key Takeaways

The clever part here is not the flight booking UI. It is the release model. Jenkins builds, tests, scans, then writes the new image tag back into Git. Argo CD watches that repository, sees the changed desired state, and reconciles the cluster.

Why Jenkins Stops at Git

The important boundary is simple. CI computes the release, Git declares it, and CD applies it.

Flight-Reservation-DevOps project is a comprehensive guide to understanding and implementing a complete Devops lifecycle for a web application.

Prajwal Patil, Project Creator/DevOps Engineer · Flight-Reservation-DevOps Project Documentation

That README line is broad, but it points at the right thing. This repo is not trying to sell a flight product. It is trying to make a full delivery lifecycle legible in one place.

The Flight App Is the Decoy

The application layer is deliberately ordinary. A Spring Boot backend handles booking logic, a React frontend handles the UI, and a check-in service adds just enough domain shape to feel real. The point is not novelty. The point is to keep the DevOps story visible.

A close editorial scene of a handwritten Kubernetes manifest being edited inside Git. One hand labeled Jenkins changes an image tag in YAML while another hand labeled Argo CD lifts the updated file toward a cluster. It explains how the pipeline deploys by changing desired state, not by calling kubectl directly.
The repo's most important move happens in one file. Change the image tag, and the rest of the system follows.

What Lives Where

LayerWhat lives thereWhy it matters
ApplicationSpring Boot, React, check-in serviceKeeps the business example small enough to understand
InfrastructureTerraform, Ansible, AWS modulesMakes the repo behave like a real platform build
OrchestrationJenkins, Argo CD, Kubernetes manifestsSeparates release computation from cluster reconciliation
Observability and qualitySonarQube, Prometheus, GrafanaAdds the day-two discipline most demos skip

The stack is broad, but the boundaries are clean. Java, JavaScript, HCL, YAML, and shell each do one job. That matters because the repo is teaching composition, not tool collecting.

Inside the infra modules

The Terraform layout reads like a production sketch. VPCs use public and private subnets, NAT keeps private resources reachable without exposing them, EKS runs the compute plane, and RDS holds application data away from the public edge. That is not just cloud decoration. It is a sane shape for a system that expects to grow.

ChoiceWhat a toy demo doesWhat this repo does
NetworkingSingle flat clusterPublic and private subnet split with NAT
DataIn-memory or local DBManaged RDS for app data
ProvisioningAd hoc scriptsTerraform modules plus Ansible setup
Releasekubectl from CIGitOps handoff through Argo CD

The Frontend Cheats, and That Is Fine

The frontend deployment is the pragmatic exception that proves the rule. Instead of forcing static assets into Kubernetes, the pipeline builds the React app and syncs the output to S3. That keeps the frontend simple, cheap, and easy to reason about.

PathBackendFrontend
ArtifactContainer imageStatic assets
Deployment targetEKS via Argo CDS3 website hosting
Release triggerManifest tag change in GitS3 sync after build
Operational burdenHigherLower

Security Is Stateless on Purpose

The backend security setup is what you want in a modern API. JWT auth makes sessions stateless, the security filter chain permits only the flows that need to be public, and role checks gate administrative actions. CSRF is disabled because the API is token driven, not browser session driven.

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http.csrf(csrf -> csrf.disable())
        .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
        .authorizeHttpRequests(auth -> auth
            .requestMatchers("/auth/**").permitAll()
            .requestMatchers("/admin/**").hasRole("ADMIN")
            .anyRequest().authenticated());
    return http.build();
}

That is a useful signal. The repo is not pretending that infrastructure alone equals maturity. It also has application security choices that match the delivery model.

The Toolchain Feels Enterprise Because It Is

SonarQube, Nexus, Prometheus, Grafana, Jenkins, Ansible, and Terraform are not there as logo wallpaper. They create the same sort of boring, durable guardrails used in many internal platform teams: code quality checks, artifact handling, metrics, and server bootstrap. The SonarQube setup even includes kernel tuning, which is the kind of detail that separates a demo from something that has at least touched real operations.

This project is designed for beginners to intermediate DevOps engineers to understand how different tools work together to automate the entire software development lifecycle.

Prajwal Patil, Project Creator/DevOps Engineer · End-to-End DevOps Project: Flight Reservation System
SignalMinimal demoThis repo
Quality gateUsually skippedSonarQube included in the flow
Artifact managementOften omittedNexus is part of the stack
MonitoringOptional screenshotsPrometheus and Grafana included
Host bootstrapManualAnsible playbooks and system tuning

How It Compares to the Usual Demos

Compared with Sock Shop, Online Boutique, example-voting-app, and spring-petclinic-cloud, this repo is smaller and less theatrical. That is its advantage. It is closer to the kind of stack a single engineer can actually reproduce, and closer to the enterprise patterns many teams want to learn without inheriting a monster.

RepoScopePrimary goalDeployment styleBeginner friendlinessEnterprise realism
flight-reservation-devopsFocusedTeach a full GitOps delivery pipelineJenkins to Git to Argo CDHighHigh
Sock ShopBroadShow microservices at scaleKubernetes showcaseMediumMedium
Online BoutiqueBroadDemonstrate cloud-native patternsGKE showcaseMediumMedium
example-voting-appNarrowTeach containers and orchestrationDocker and swarm styleHighLow
spring-petclinic-cloudFocusedShow Spring cloud-native designCloud-native service mesh styleMediumMedium

The repo wins by being teachable and specific. It does not try to be the biggest demo on the internet. It tries to be the clearest explanation of how a modern release pipeline fits together.