Jenkins.. the most controversial topic of CI/CD.
After we made the decision to split our monolith to multiple micro-services over 3 languages and a heap of technology, we needed a way to support CI/CD for everything.
Jenkins allowed us to create generic and elastic pipelines very easily, supporting everything from Versioning, Docker builds, Tests, Preparing helm charts, Deploying to any environment - And for all of that, all that the developer has to do is add a few lines to his Jenkinsfile:
basicPipeline {
PROFILE = "MicroService"
COMPONENT = "backend"
}
Of course we also use Jenkins for all our CronJobs, regression tests and various helpful mundane tasks such as getting a Windows environment on GCP running with a pre-defined image in a matter a click and two minutes.
Also, did you ever wait way too long for other jobs to finish before your branch could be built and tested? Well using Jenkins on Kubernetes and pre-emtibles GCP nodes, we can technically support to run just as many concurrent builds as we need to. I won't say the work behind this gigantic ci/cd pipeline was trivial, but once we understood all the tricks - it's well worth it.