We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Building and integrating a Continuous-Integration system within your open source project

Formal Metadata

Title
Building and integrating a Continuous-Integration system within your open source project
Title of Series
Number of Parts
183
Author
License
CC Attribution - NonCommercial - ShareAlike 3.0 Germany:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Identifiers
Publisher
Release Date
Language
Producer
Production Year2015
Production PlaceSeoul, South Korea

Content Metadata

Subject Area
Genre
Abstract
So you have an open source project or you want to create a new one. Maybe you have worked on a development project in the past that didn’t have quite the amount of rigor you would have liked. You know you want a build system for your project that is easy to administer, cheap, and powerful, but where do you start? Here is how we implemented our own process using free open source tools. We learned from experience that developers are more focused on solving problems than perceived “housekeeping” tasks. We needed tools that would automate the mundane, repeatable, mechanical, or human-difficult tasks so that developers could focus on what they are good at. We needed a single-sign on through Github to lower any barriers to tool usage that might exist. We needed a dead-simple way to determine if our commits broke functionality anywhere else in code. We needed to track how much of our code was covered by unit tests. Finally, we needed to be able to quickly and easily review each-other’s code and provide feedback. We decided on TravisCI to handle build duties in Maven with a nested project structure and also for its integration with Coveralls. For bug tracking, release scheduling, and task management, we chose WaffleIO for its tight integration with Github issues. One additional feature we desired was static analysis so that simple errors that lie outside of a linter could be caught and reported. This was handled by a combination of Coverity scans and a static analysis tool for Eclipse called Findbugs. Due to our platform support and third-party library (GDAL) requirement, the Github Wiki was the perfect place to keep all setup documents and other helpful articles for end-users and project new-comers. This system for software development worked quite well in most cases. Builds were automated, moderately tested (~40-60% coverage), and complaining to the team loudly via email when things broke. We had a new problem though: build breakages in the master branch and the inability to share code that was not yet fully functional. To alleviate this, we started using the branching and merging functionality that makes Git so valuable. Now, no direct commits occur to the master branch unless in very special circumstances. A developer will see the TravisCI build results before the merge ever occurs, allowing them to adjust code or test cases *before* they cause failures. As a side effect, the merge request workflow allows the team to perform code reviews quickly and easily. Finally, any CI system is not without challenges. Building a continuous integration system has upfront costs that should not be ignored. The payoff from those costs, however, is code/product quality and the avoidance of technical debt. Lastly, some of these CI tools lack support for private repositories.