We are developing Microservices using Spring Boot which are than packaged up as Helm Charts and deployed onto a Kubernetes cluster. Each service has a Jenkinsfile and we have been releasing each service individually below:
This approach is fairly straight forward but it doesn't actually give you a shippable artifact and you end up with inconsistencies.
What we would like to do is group the release using an umbrella Helm chart shown below (Parent A):
I'm struggling to think of a way to do this without having to manually release each service, then update the versions in the parent chart. Is anyone doing this in an automated way?
If I understand well your problem, you could solve it by using the Jenkins multijob plugin. And without updating your current existing job.
Your workflow would look like:
Parent Job Service A --> Build --> Package --> QA --> Staging --> Production Service B --> Build --> Package --> QA --> Staging --> Production Service C --> Build --> Package --> QA --> Staging --> Production
Where your parent job trigger all your child jobs.
I have seen a similar problem solved this way. Also sometime your child service must be released together, or one of your service must always be ahead (server). You can add some python/shell validation scripts in your parent job in order to make sure that your final product is always releasable.
I can share a simplified view on how we ship code Codefresh:
This is a very simplified description. In reality the pipeline also does stuff like:
To be honest this is not a simple pipeline, but hey, we are a CI/CD company so this is our bread and butter.
We are often asked by customers to share more about the work we've done, and even replicate it for a customer, which we happily do. Feel free to ping me.