Automating Dev Processes with Jenkins
Submitted By Jenkins User Anti Asko
CERN’s Application and Services division (APS) is responsible for a leading role in all technical matters, including collaborating with users, partners, and service providers. That’s why automation is key. And that’s exactly what was achieved with Jenkins.
Organization: CERN’s Controls Applications Services; Funding provided by Member States
Programming Language: Java, Node.js, Python Platform: Docker/Kubernetes, Linux, MacOS, Windows Version Control System: GitLab Build Tool: Gradle
Company website: https://home.cern/
Project website: https://be-dep-co.web.cern.ch/applications-and-services-aps
Community Support: Relied on Jenkins Users Google Group or IRC Chat, Jenkins.io websites & blogs, networking at Jenkins event, and spoke with colleagues and peers
Accelerating high-quality application delivery and reducing overhead by automating dev processes.
Background: The Application and Services section of CERN (APS) provides generic data management services and comprehensive software solutions needed within the Accelerator & Technology Sector. APS is responsible for a leading role in all technical matters, collaborating with users, partners, and service providers. This collaboration covers requirement analysis and data modeling, design and implementation of the corresponding data repositories, server-side processes, client APIs, and generic user-oriented applications. That’s why it was imperative that CERN’s software was error-free and that CERN developers were able to focus on building high-quality applications as opposed to QA and testing processes. Automation was key.
Goals: The main challenge we hoped to solve with Jenkins was to facilitate day-to-day work by automating repetitive, error-prone steps in delivering our tools to our end-users. We wanted to lower daily work overhead by automating the building and testing process through merge requests integration between Gitlab and Jenkins. Moreover, we sought to automate the continuous integration and delivery of our web applications to eliminate any human errors from the process.
Solution & Results: We put Jenkins in the middle of our development process. Here’s how:
- We merged every request trigger to build on the branch. In this way, we are able to make sure no failures are faced while it deploys a provision dockerized instance.
- We merged every branch trigger on dev as an integration build on dev branch. It automatically deploys a dev instance of our applications (with the help of Ansible software) to make sure everything works as expected.
- We automated a release process with a series of Jenkins jobs that builds the applications and deploys them to the appropriate servers.
By adding Jenkins into development, we significantly lowered our delivery time and removed overhead from the process. The integration with Gitlab and Artifactory was also a huge help in this endeavor. Since we could now run our e2e tests with the help of xvfb plugin, it allowed us to automate parts of the QA process on Jenkins. By automating our development process, Jenkins does the heavy work of building, testing, releasing, and deploying, giving developers more time to focus on developing new features and delivering high quality applications. It also drove significant results, including:
- improved product quality proven by user’s feedback
- significant shorter release cycles
- lower development overhead and manual intervention
- faster delivery of hotfixes