Skip to content
RedCube IT Services

Projects

Case Study: One-Button Releases for a Customer Portal on Kubernetes

A logistics customer portal on Kubernetes: from hand-made updates to one-button Jenkins releases in about 2 minutes, with rollback and full history.

A logistics company’s customer portal — shipments, payments, tracking — ran on a two-node Kubernetes cluster, but every update was made by hand on the production server by one developer. We turned releases into one button in Jenkins: about two minutes per release, one-click rollback, and a full history of who released what.

The situation

  • The portal ran as a single hand-started container (“pod”) without a Kubernetes Deployment — no version history and no clean rollback.
  • Updates meant logging in to production as administrator and building the new version right there.
  • Database passwords, payment keys and the SSL certificate were baked into the app image.
  • No record of releases; only one person knew the steps.
  • The portal takes payments and runs scheduled payment jobs, so only one copy may run at a time.

What we did

  1. Kubernetes Deployment instead of a hand-made pod — current and previous versions, rollout status and rollback.
  2. Secrets out of the image: passwords and certificate moved to a Kubernetes Secret, mounted read-only.
  3. Jenkins LTS in the client’s office — a small Linux container on their Proxmox server, not reachable from the internet.
  4. One release job with three actions — deploy (any branch), rollback, status — and the recipe (Jenkinsfile) kept in the same private GitHub repository as the code.
  5. Versioned images: every release is tagged with its Git commit; the last five are kept for rollback.
  6. Smoke test and automatic rollback: after a release Jenkins opens the portal; if the new version does not come up, Kubernetes returns to the previous one.
  7. Least privilege: read-only GitHub key; on the server Jenkins’ key can run only the release script and only from the office network; in Kubernetes its account can change only this one app.
  8. Manual start by design: the owner presses the button in a quiet hour — the release itself is always the same.
The release job step by step (times from real runs)
The release job step by step (times from real runs)
The Jenkins job the team uses (illustration; names are examples)
The Jenkins job the team uses (illustration; names are examples)

The result

BeforeAfter
Who can releaseOne developer with admin access to productionAnyone with access to the Jenkins button
How longManual stepsAbout 2 minutes
RollbackRebuild the old version by handOne click, or automatic on failure
What is running“latest”The exact Git commit
PasswordsInside the imageRead-only Kubernetes Secret
HistoryNoneWho, when, which version, full log

The first release with the button went through on the first try. Together with Grafana monitoring for the same company, the team now sees the effect of every release on one screen.

Want to know more? Read what Jenkins is and how it works, in plain words, or talk to us.