Background: The product has more than 15 unique microservices making it very difficult to track all the changes going to the repositories of these microservices. Building the microservices -- and integrating them -- was a bigger challenge. As the project grew in scope, the number of developers working on the project also increased significantly.
Not only was a continuous integration framework needed to improve the management and efficiency of the project, a continuous deployment and delivery process was also needed to get the necessary feedback returned quickly.
Goals: Automating the build and release process by implementing CI and CD using Jenkins.
Solution & Results:
I'm able to manage the project easily with just two engineers rather than having an army to support these activities if they were done manually. Jenkins is the instrument of a project's success.
The project was composed of multiple microservices and managing all these services was a really hectic task. We used Jenkins integrations with different tools like Mesos, Vagrant, Docker, and Artifactory. It was quickly clear that managing this process with Jenkins is way easier than it was without using Jenkins.
The continuous integrations using Jenkins multi-branch pipelines helped to provide feedback to developers immediately as they introduce bugs in the version-controlled source. Pull request webhook plugins in Jenkins are advanced and are used to trigger builds only when the feature is ready, which had helped in controlling the frequency of builds: the integration builds were slated to run on a regular interval when there are code changes in the repository of any associated microservice. Finally, all the microservices that are built during the day are assembled at night and the product is deployed to a vagrant VM by a job that is created by a Jenkins job.
This deployed setup has the integration test suite, which is a robot framework that gives detailed test results. These results are automatically published in the Jenkins dashboard and circulated to stakeholders via email. The feedback, received after continuous integration, has helped to dramatically reduce static code analysis bugs.
The integration of all the plugins in Jenkins had helped in having a centralized location for all types of dashboards. For example, the multibranch pipeline is a boon for setting up CI and keeping a track of feature/developer branches. And integration of different DevOps tools via plugins have reduced a lot of scripting/coding efforts.
Jenkins is the instrument of a project's success. Members of our dev teams are happy that they do not have to waste time and effort fixing bugs at later stages due to earlier feedback. Plus, I'm able to manage the project easily with just two engineers rather than having an army to support these activities if they were done manually.
Overall, we saw the following results: