Build System Overhaul & Jenkins Pipeline Setup

Who: Marble
When: 9/2017-12/2017
Where: San Francisco, CA
Languages: C++, CMake, Groovy, Jenkins Pipeline

Rozi was consulting with Marble and recommended that they overhaul their software development processes. Phillip worked with Marble to improve their build system, re-enable unit tests, and bring-up a build server with multiple nodes for load balancing.

Improving the build system included:

  • Refactoring the build system from using three separate CMake builds in a sequence to using a single CMake build
  • Reducing build times
  • Re-enabling unit tests and helping the team get tests to pass
  • Enabling out-of-source build support
  • Supporting software variants with compile-time settings

Once the build system was updated, we created a Jenkins server for Marble HQ which utilized our Jenkins Pipeline Library. The server utilized three slave nodes to support multiple concurrent builds, as the typical build took ~12 minutes (including unit tests). This was a drastic improvement over the 45min Travis CI builds (without unit tests) which the team was previously using.

The Jenkins server was configured to notify GitHub of the build & test status for each pull request. The GitHub process was updated so that pull requests could not be merged unless the build was successful and all tests passed.


Kevin Peterson, SW lead at Marble, had this to say:

Phillip is a talented embedded software engineer who did some excellent work for Marble. He did a great job on several projects for us including build server development and firmware for a board we designed. One of his truly excellent traits is his ability to come in on time. Phillip carefully scopes his work and sticks to the original scoping. His documentation is also incredibly thorough. Very impressive.