Background: I used Jenkins to automate my final project to finish my graduate degree in Informatics. This project was a videogame using Jenkins as my automation tool to speed up the development with Unreal Engine 4. Unreal Engine 4 provides a testing suite inside its Automation Framework, but it’s tedious to write a test, build the project, open the editor, run the tests and see if they succeed or fail.
Having had a little experience with Continuous Integration (CI) using Travis, I wanted a tool that automated the process of change verification and approval that would also be capable of communicating with Unreal Engine 4. That’s when I found Jenkins, a robust automation program that suited the job.
Goals: Creating a CI environment to help video game development
"Jenkins made me focus on the important aspects of my project, while at the same time it ran all the boring and repetitive tasks needed to approve and continue the development of the project."
Solution & Results: Thanks to Jenkins, I was able to execute the build process, tell the Unreal Engine 4 editor to run all my tests, create a report of their results, transform the report’s JSON output to JUnit, run the code coverage process and notify myself about the results of the pipeline through Slack. All of it is configured via a simple jenkinsfile!!! And a push or pull request to my GitHub repository triggered Jenkins to run all these tasks automatically!!
The time invested in creating a CI pipeline with Jenkins saved me a lot of headaches and development time that would otherwise have been wasted on manual repetition of tedious tasks! The fact that Jenkins is open-source and free to use was a huge incentive in using it because, as a student, my budget was tight. :)
I relied on the following key capabilities:
BlueOcean to create a Jenkins project really fast. It’s simple and straightforward to use.
JUnit plugin to be able to generate Tests reports in the build results page.
Cobertura plugin to be able to generate code coverage reports and show graphs of the different builds coverage.
Git Client plugin to control the local git repository.
GitHub API plugin to control the remote git repository in GitHub.
Pipeline API creates a pipeline as code and has its configuration stored in the same repository as the project. This allows the ability to have a nice configuration management of the automated pipeline.
Groovy language support in the declarative pipeline. This allowed me to use a method capable of transforming JSON tests reports into JUnit reports.
Using Jenkins yielded significant results, including:
Reduction of repetitive, boring, and cumbersome tasks
Automation of the whole development process
1000X increase in productivity
Feedback and monitoring of my project all in one place