SlideShare a Scribd company logo
Java Monolith to Kubernetes:
An Open Source Journey with Jenkins-X
Ryan Dawson and Mauricio Salatino
Outline
● Started with a monolith, single job
● Microservices = many jobs, many artifacts
● Kubernetes = various artifact types
● Jenkins-X loves k8s apps
● And it loves CD and gitops
● We also build libraries with it
● And it works pretty well!
The monolith
Polyglot world
Jenkins-X to the rescue!
From java monolith to kubernetes microservices - an open source journey with jenkins x
jx import
Let’s create an app
https://youtu.be/xN9eydj4SHQ?t=250
JX
jx env
Environment = namespace
Represented by git repo
Git repo contains helm chart
GitOps
Git repo as source of truth for k8s env/namespace
For JX this is a helm chart
Everything in source control
Continuous Delivery
Automatic promotion, not manual gates
Every commit is potentially-releasable
From java monolith to kubernetes microservices - an open source journey with jenkins x
Preview Environments
Gets you up and running with tooling
Kubernetes-native
Encourages best practices
Changed our way of thinking
We did a little tweaking
github charts repo
public dockerhub
nexus outside of cluster
various testing environments
From java monolith to kubernetes microservices - an open source journey with jenkins x
Complex pipeline chains
Updatebot to the rescue
Which looks like
https://drive.google.com/file/d/1yM2DBP-
1WeMpAkAovOp2QqJS_wjHbSh0/view?usp=sharing
Merge automation
End to end tests
Scenarios repo used for running tests against charts
Challenges
Horsepower
Reliability
Volume
Duplication
Knative and prow
Foundation
Thanks!
Please do ask questions!

More Related Content

What's hot (20)

PDF
Docker + Tenserflow + GOlang - Golang singapore Meetup
sangam biradar
 
PDF
Breaking bad habits with GitLab CI
Ivan Nemytchenko
 
PPTX
Cloud Native Okteto Cloud
sangam biradar
 
PDF
Gitlab ci e kubernetes, build test and deploy your projects like a pro
sparkfabrik
 
PDF
Continuous Deployment with Kubernetes, Docker and GitLab CI
alexanderkiel
 
PDF
CI with Gitlab & Docker
Joerg Henning
 
PPTX
Workflows using Git GitHub | Edureka
Edureka!
 
PDF
Introduction to GitHub Actions
Knoldus Inc.
 
PDF
Breaking Bad Habits with GitLab CI
Ivan Nemytchenko
 
PDF
Devops Porto - CI/CD at Gitlab
Filipa Lacerda
 
PDF
Using GitLab CI
ColCh
 
PDF
ConcourseCi Dockerimage
Gwenn Etourneau
 
PDF
Jenkins vs GitLab CI
CEE-SEC(R)
 
PPTX
CI/CD with Rancher CLI + Jenkins
Go Chiba
 
PDF
"Workstation Up" - Docker Development at Flow by Mike Roth
Docker, Inc.
 
PDF
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
Red Hat Developers
 
KEY
Travis CI
bsiggelkow
 
KEY
Travis CI: Fun and easy CI for your Plone packages
Nejc Zupan
 
PDF
Docker introduction in Hardware Company
Evan Lin
 
PDF
Docker from a team perspective
Edwin Vlieg
 
Docker + Tenserflow + GOlang - Golang singapore Meetup
sangam biradar
 
Breaking bad habits with GitLab CI
Ivan Nemytchenko
 
Cloud Native Okteto Cloud
sangam biradar
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
sparkfabrik
 
Continuous Deployment with Kubernetes, Docker and GitLab CI
alexanderkiel
 
CI with Gitlab & Docker
Joerg Henning
 
Workflows using Git GitHub | Edureka
Edureka!
 
Introduction to GitHub Actions
Knoldus Inc.
 
Breaking Bad Habits with GitLab CI
Ivan Nemytchenko
 
Devops Porto - CI/CD at Gitlab
Filipa Lacerda
 
Using GitLab CI
ColCh
 
ConcourseCi Dockerimage
Gwenn Etourneau
 
Jenkins vs GitLab CI
CEE-SEC(R)
 
CI/CD with Rancher CLI + Jenkins
Go Chiba
 
"Workstation Up" - Docker Development at Flow by Mike Roth
Docker, Inc.
 
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
Red Hat Developers
 
Travis CI
bsiggelkow
 
Travis CI: Fun and easy CI for your Plone packages
Nejc Zupan
 
Docker introduction in Hardware Company
Evan Lin
 
Docker from a team perspective
Edwin Vlieg
 

Similar to From java monolith to kubernetes microservices - an open source journey with jenkins x (17)

PDF
Jenkins x gitops
Jose Luis Sánchez Rebollo
 
PDF
Jenkins X Lessons Learned as OSS Contributor
Mauricio (Salaboy) Salatino
 
PDF
Jenkins X on Linode LKE
Mauricio (Salaboy) Salatino
 
PDF
Jenkins X intro (from google app dev conference)
Michael Neale
 
PPTX
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps_Fest
 
PDF
The DevOps 2.6 Toolkit: Jenkins X: Cloud-Native Kubernetes-First Continuous D...
comeewidbyph
 
PDF
Introduction to Jenkins X - a beginner's guide
Andrew Bayer
 
PPTX
The_Little_Jenkinsfile_That_Could
Shelley Lambert
 
PDF
Jenkins World 2019 - Integrating jenkins x with your business
Mauricio (Salaboy) Salatino
 
PPTX
XPDays-2018
Yegor Maksymchuk
 
PDF
Put the dev back in devops - Cloud-native at local speed! - RH Summit 19
Jorge Morales
 
PPTX
DevOps best practices with OpenShift
Michael Lehmann
 
PDF
DevOps Spain 2019. David Cañadillas -Cloudbees
atSistemas
 
PPTX
DevOps Best Practices with Openshift - DevOpsFusion 2020
Andreas Landerer
 
PPTX
OpenShift with Eclipse Tooling - EclipseCon 2012
Steven Pousty
 
PDF
Jenkins X – CI/CD in wolkigen Umgebungen
inovex GmbH
 
PDF
OpenShift Build Pipelines @ Lightweight Java User Group Meetup
Tobias Schneck
 
Jenkins x gitops
Jose Luis Sánchez Rebollo
 
Jenkins X Lessons Learned as OSS Contributor
Mauricio (Salaboy) Salatino
 
Jenkins X on Linode LKE
Mauricio (Salaboy) Salatino
 
Jenkins X intro (from google app dev conference)
Michael Neale
 
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps_Fest
 
The DevOps 2.6 Toolkit: Jenkins X: Cloud-Native Kubernetes-First Continuous D...
comeewidbyph
 
Introduction to Jenkins X - a beginner's guide
Andrew Bayer
 
The_Little_Jenkinsfile_That_Could
Shelley Lambert
 
Jenkins World 2019 - Integrating jenkins x with your business
Mauricio (Salaboy) Salatino
 
XPDays-2018
Yegor Maksymchuk
 
Put the dev back in devops - Cloud-native at local speed! - RH Summit 19
Jorge Morales
 
DevOps best practices with OpenShift
Michael Lehmann
 
DevOps Spain 2019. David Cañadillas -Cloudbees
atSistemas
 
DevOps Best Practices with Openshift - DevOpsFusion 2020
Andreas Landerer
 
OpenShift with Eclipse Tooling - EclipseCon 2012
Steven Pousty
 
Jenkins X – CI/CD in wolkigen Umgebungen
inovex GmbH
 
OpenShift Build Pipelines @ Lightweight Java User Group Meetup
Tobias Schneck
 
Ad

More from Ryan Dawson (14)

PPTX
mlops.community meetup - ML Governance_ A Practical Guide.pptx
Ryan Dawson
 
PPTX
Conspiracy Theories in the Information Age
Ryan Dawson
 
PPTX
Why is dev ops for machine learning so different - dataxdays
Ryan Dawson
 
PPTX
Maximising teamwork in delivering software products
Ryan Dawson
 
PPTX
Maximising teamwork in delivering software products
Ryan Dawson
 
PPTX
Java vs challenger languages
Ryan Dawson
 
PPTX
Challenges for AI in prod
Ryan Dawson
 
PPTX
From training to explainability via git ops
Ryan Dawson
 
PPTX
Why is dev ops for machine learning so different
Ryan Dawson
 
PPTX
How open source is funded the enterprise differentiation tightrope (1)
Ryan Dawson
 
PPTX
Whirlwind tour of activiti 7
Ryan Dawson
 
PPTX
Jdk.io cloud native business automation
Ryan Dawson
 
PPTX
Identity management and single sign on - how much flexibility
Ryan Dawson
 
PPTX
Activiti Cloud Deep Dive
Ryan Dawson
 
mlops.community meetup - ML Governance_ A Practical Guide.pptx
Ryan Dawson
 
Conspiracy Theories in the Information Age
Ryan Dawson
 
Why is dev ops for machine learning so different - dataxdays
Ryan Dawson
 
Maximising teamwork in delivering software products
Ryan Dawson
 
Maximising teamwork in delivering software products
Ryan Dawson
 
Java vs challenger languages
Ryan Dawson
 
Challenges for AI in prod
Ryan Dawson
 
From training to explainability via git ops
Ryan Dawson
 
Why is dev ops for machine learning so different
Ryan Dawson
 
How open source is funded the enterprise differentiation tightrope (1)
Ryan Dawson
 
Whirlwind tour of activiti 7
Ryan Dawson
 
Jdk.io cloud native business automation
Ryan Dawson
 
Identity management and single sign on - how much flexibility
Ryan Dawson
 
Activiti Cloud Deep Dive
Ryan Dawson
 
Ad

Recently uploaded (20)

PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PPTX
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
PPTX
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
PDF
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
DOCX
Import Data Form Excel to Tally Services
Tally xperts
 
PDF
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
PDF
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
PPTX
Equipment Management Software BIS Safety UK.pptx
BIS Safety Software
 
PPTX
Fundamentals_of_Microservices_Architecture.pptx
MuhammadUzair504018
 
PPTX
Writing Better Code - Helping Developers make Decisions.pptx
Lorraine Steyn
 
PDF
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
Import Data Form Excel to Tally Services
Tally xperts
 
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
Equipment Management Software BIS Safety UK.pptx
BIS Safety Software
 
Fundamentals_of_Microservices_Architecture.pptx
MuhammadUzair504018
 
Writing Better Code - Helping Developers make Decisions.pptx
Lorraine Steyn
 
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 

From java monolith to kubernetes microservices - an open source journey with jenkins x

Editor's Notes

  • #3: We’re from activiti, we do open source business automation and business process management. We’re going to explain to you how we went from building our project as a monolith to microservices and how we found Jenkins-X and what we’re doing with it. We’ll talk about all the cool things Jenkins-X can do for you out of the box and how we’ve customised it.
  • #4: Two years ago we on the Activiti project had a pretty standard setup for the time. One repository, one build job. One type of artifact - maven. Build process driven by features in CI (bamboo) Releases manually initiated
  • #5: Microservices -> lots of different types of artifacts. Not just maven anymore. Not just maven & nexus -> decisions docker images: where to host? Where to run? Where should the nexus live? Should the docker registry come from the cloud provider? Use helm? Where to host helm charts?
  • #6: Jenkins-X answers many of these questions. So Out of the box it is highly opinionated. It adds all the glue to run CI/CD well in Kubernetes and follow best practices Has a `jx create cluster` wizard - https://youtu.be/xN9eydj4SHQ?t=17 - concluding at https://youtu.be/xN9eydj4SHQ?t=146
  • #7: We can see nexus and chartmuseum and so on https://youtu.be/xN9eydj4SHQ?t=213 JX is using Jenkins but isn’t just Jenkins. It’s Kubernetes-native
  • #8: Wizards for apps as well as clients Jx import from cloned repo Adds e.g. dockerfile based on draft pack Adds jenkinsfile and creates pipeline
  • #9: As well as importing existing apps, jx cli can create a new one from a template And give us a pipeline for it - so let’s see that https://youtu.be/xN9eydj4SHQ?t=250
  • #10: So when I do `jx import`: Draft pack is applied Webhooks created on git repo Jenkins pipeline created based on Jenkinsfile (added by draft pack if not present) Main branch of pipeline runs (master by default) Version tag created and artifacts built. Maven artifact goes to nexus in the cluster Docker image built and goes to cloud provider registry Chart goes to chartmuseum in cluster PR goes to environment PR merged to environment and env chart deployed
  • #11: JX creates namespaces out of the box for isolated environments. By default you get a staging environment and your apps get deployed there - https://youtu.be/xN9eydj4SHQ?t=186 Env represented by a git repository containing a helm chart. Big helm chart represents all the microservices = ‘umbrella chart’ or ‘environment chart’.
  • #12: JX works in GitOps style - it uses git to represent environments. So if you were to lose an environment, you could get it back - everything is tracked JX puts as much in git as possible e.g. Jenkinsfiles So if your CI system dies, you don’t lose your pipeline definitions And a pipeline should run when git changes through webhook
  • #13: CD approach in JX makes promotion as automated as possible, as much as possible So every commit to master is tagged, versioned and built And automatically promoted through PRs Emphasis with CD is on getting to prod, not sheltering code away Fixed promotion-ready versions, not temporary snapshots Promotion through automation, not code freezes for manual tests Only the production gate is manual by default (so continuous delivery, not continuous deployment)
  • #14: To make sure the flow is crystal clear: Create a PR to a microservice (could here check it through preview env) Commit the change by merging it Pipeline runs based on webhook - it creates a fixed version tag and builds a docker image and helm chart version. Pipeline creates PR into the staging environment. If mergeable then the staging environment gets updated. There’s a similar promotion workflow from staging to production. https://youtu.be/xN9eydj4SHQ?t=454
  • #15: Actually the previous slide skipped over preview environments but they are optional They are namespaces dedicated to an instance of a microservice for a PR By default you just get that version of the microservice there - but you can add more or link to services in the staging environment
  • #16: Having JX propose answers for lots of tooling decisions helped us a lot It’s cool that all the whole workflow is kubernetes-native, from the use of gitops to build pods It showed us how we could do CD for k8s We wanted to be sure Activiti Cloud projects would able to do this For us to do it too we realised we had to depart from some defaults
  • #17: We are a vendor building open source libraries and components - so we needed hosting to be more public So we had to override some things not in the wizards Specifically in secrets in the JX k8s configuration. We also wanted to run various types of end to end tests in different namespaces but we’ll come back to that bit later.
  • #18: JX defaults are aimed at a building typical web apps. Our project structure more complex than typical web app. We’re a vendor producing libraries that people can build on top of. And we’re also building projects ourselves using those libraries. Our pipelines to need chains of deps.
  • #19: One pipeline needs to update another pipeline or several. So not just an environment requirements file being updated by pull requests resulting from builds of applications. Need PRs for maven artifacts etc. PR targets could be other projects.
  • #20: JX under the hood uses updatebot. A java project - a jar file that has a jenkins plugin and you can use it in your pipelines. Specify list of target/downtream repos in yaml file Call update with version and type of artifact It scans the target repos and sends the update there, creating PRs.
  • #21: https://drive.google.com/file/d/1yM2DBP-1WeMpAkAovOp2QqJS_wjHbSh0/view?usp=sharing Some projects consumed by several projects e.g. ‘activiti-cloud-dependencies’. So its Jenkinsfile tells updatebot to push the version to the configured target repos Updatebot goes through all target repos, clones each, determines where to put the version and creates a pull request. This happens right after we’ve pushed the maven artifact - it is the same process for other types of artifact. PR gets evaluated on the other end - the target project has its own configuration to run tests against any pull requests. Here some of the downstream repos are controlled by different JX clusters.
  • #22: Updatebot means lots of PRs. We don’t want to be merging those manually. And CD means reduce manual gates. So we needed good tests in each of the repos. mergify: PRs are automatically merged when tests and checks pass.
  • #23: We build different sets of examples from our base libraries. Need to test interactions of components per example with E2E tests We represent each example with a helm cart, each with a dedicated pipelines. Branches for those pipelines dynamically create namespace per PR. E2E tests run against namespace and it is destroyed at the end. Kinda like PRs into a staging environment but envs created and destroyed dynamically. Like preview envs but without having to do service linking to talk to other services.
  • #25: Lots of pipelines Multiple instances of apps with each app instance containing a bunch of different microservices and databases. So we’ve got some fairly powerful clusters running this. Jenkins-X uses an elastic pool of build pods to run the build jobs so it can scale up and down… but still needs a fair bit of power. We chose multiple clusters for isolation of the different parts of our project for clarity and independent upgrading - we could’ve run it all on one cluster from a resourcing point of view. JX can also be multi-tenanted.
  • #26: With all these PRs is that occasionally you get little github blips. It’s so rare that you don’t normally notice it but we make loads of requests. So we’ve had to put retries in and make sure we’re handling the odd failure. General distributed systems considerations but here applied to the CI system - because it’s distributed.
  • #27: A lot of activity going through these pipelines. A couple of times we have hit github’s rate-limiting. Currently we have a user dedicated to updatebot and we rarely hit the limit but if we grow much more then we’ll have to start using separate users for different concerns.
  • #28: Some configuration appears in multiple places in our setup...especially helm charts. At the library layer very little repetition. Every app has a helm chart but some of the apps have pretty much the same chart. There are ways to deal with this but it requires thought and some tradeoffs.
  • #29: We’re just using ‘jenkins-x classic’. There’s another version of jenkins-x you can choose if you want that is built on an even more powerful model, with knative to do run jobs on kubernetes in a way that scales much like serverless. https://medium.com/@jdrawlings/serverless-jenkins-with-jenkins-x-9134cbfe6870 We’re not quite ready to migrate to that yet but it’s certainly exciting and we’re keeping a close eye on it. We’re also keeping an eye on options for prod rollout strategies, esp istio - https://blog.csanchez.org/2019/01/24/progressive-delivery-with-jenkins-x/