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

Video thumbnail (Frame 0) Video thumbnail (Frame 2405) Video thumbnail (Frame 5881) Video thumbnail (Frame 6471) Video thumbnail (Frame 17974) Video thumbnail (Frame 18952) Video thumbnail (Frame 20348) Video thumbnail (Frame 32540)
Video in TIB AV-Portal: Building and integrating a Continuous-Integration system within your open source project

Formal Metadata

Building and integrating a Continuous-Integration system within your open source project
Title of Series
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 license.
Release Date
Production Year
Production Place
Seoul, South Korea

Content Metadata

Subject Area
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.
Scripting language Slide rule Presentation of a group Implementation Link (knot theory) Open source Tesselation Variety (linguistics) INTEGRAL Multiplication sign Projective plane Bit Food energy Medical imaging Latent heat Process (computing) Computer animation Order (biology) Website
Axiom of choice Open source Divisor Code Multiplication sign Online help Theory Neuroinformatik Causality Compiler Software testing Physical system Scripting language Standard deviation Linear regression Closed set Projective plane Unit testing Funktionalanalysis Frame problem Newsletter Data management Computer animation Software Personal digital assistant Network topology Row (database)
Suite (music) Presentation of a group Building Code Java applet System administrator Multiplication sign Proper map Dimensional analysis Formal language Hypermedia Different (Kate Ryan album) Single-precision floating-point format Damping Software framework Scripting language Area Covering space Programming paradigm Electric generator Linear regression Unit testing Funktionalanalysis Flow separation Data management Process (computing) Order (biology) Chain Self-organization Right angle Escape character Resultant Relief Row (database) Trail Polynomial Game controller Vapor barrier Service (economics) Open source Divisor Computer file Patch (Unix) Similarity (geometry) Control flow Revision control Intranet String (computer science) Touch typing Reduction of order Gastropod shell Energy level Software testing Code refactoring Booting Traffic reporting Key (cryptography) Poisson-Klammer Projective plane Physical law Mathematical analysis Directory service Software maintenance Cartesian coordinate system Loop (music) Computer animation Integrated development environment Software Password Statement (computer science) Musical ensemble Routing
Code INTEGRAL View (database) Multiplication sign 1 (number) Insertion loss Mereology Subset Wiki Web 2.0 Fluid statics Cuboid Software framework Error message Social class Physical system Scripting language Area Computer simulation Sound effect Bit Price index Unit testing Type theory Repository (publishing) Right angle Text editor Whiteboard Freeware Resultant Thomas Bayes Row (database) Point (geometry) Server (computing) Vapor barrier Computer file Open source Fehlererkennungscode Information and communications technology Branch (computer science) Web browser Raw image format Machine vision Number Revision control Latent heat Natural number Profil (magazine) Gastropod shell Software testing Traffic reporting Computing platform Multiplication Tesselation Autocovariance Projective plane Mathematical analysis Line (geometry) Cartesian coordinate system Limit (category theory) Computer animation Visualization (computer graphics) Software Integrated development environment Personal digital assistant
and I the good times and 25 and
I will get started and the so that I give a brief attending is the last day at a conference I know that towns sometimes you can struggle with the tenets unless a presentation so I thank you for your time I want to get money Stephen the landed and RGI and I'm talk to you about building continues integration or C. I into your open source project a little bit about me I would like as evidence of 1 near the energy I've had over the past 3 years of a lot of experience of working with cashed in large Russia image tile dataset so of and that would say on the of In particular I silo war for developing work your job quite unaware of the same general I have you know novel problems and in ASR to solve them and I become a wide variety of tools in order to do so and early implementer of the OGC GeoPackage encoding specification and the and that the here the here's some they get have links for those projects if you're interested to see and easily put up on on this on this slide we put up on the phosphogens site and the 1st project there have suffered a geospatial data is our job implementation full-featured and then if you interested in in really good performance using and Python scripts and C I G packet pythons is another project to check out so the presentations
that so we're involved in the yes on wednesday we had to package and how this is changing how governments think about standards and also yesterday to presented about GeoPackage enable search tools laser pinch the nose please take a look so I'll be talking about why do we need the i what is the problem that we're trying to fix and that once we once we have a problem or trying to fix can affect and how how best to we do that and in a row some of the best practices you can implement for CI on an open source project or even a closed source project managers the closest but get newsletter open-source tools so set of badly about the problem I what I thought about and both systems are quite complicated and as a matter of theory data using node if you're using the actual JavaScript code compiler of GBM and we made Python builds light will that uses the sister scripts but in the depending on where using maiden great all there's a lot of choices that there's a lot a lot that can go wrong in the course of actually building your software so you're the bank would have a frame a tree using that have the dependencies you need hunger project the testing you need to do whether it be a unit testing or actual functional user testing and perhaps you know enlightenment in my case you have all that's all but then we still need to get that stopped work on a computer on an end user's device what do you need install and what do you do about that and so the idea that that human factors are typically the biggest biggest cause for concern that I have found leading to a hadn't been in the need for a CI system this could be is there someone summoned typed the wrong name for a for a a thought for a for a variable or maybe they've been in the variable X for a MI tends to be seen especially in in college when you're when you're learning a perhaps the people that you have and maybe they knew they just coming onto your project and the other for understanding of the impact of their changes in and what their with the you are submitting or I just just they have they just have no idea I know idea you going on and and indeed a lot a lot more assistance and help
so this is a really really good comic that I found that that adequately describes of my experiences in the past of you know really concerned about you know think of code and then they don't what wide something bright wives the regression 0 well where on and just way too good for that you know that this is all stuff that I'd rather not but a whole lot of time into only slows down do not true the regressions I just
mentioned was that made the news side-effect refactoring maybe you changed the way area a works and the functionality in area B breaks as a result and and on the elimination of resources that you can think had any impact of break something far down the chain maybe you're testing doesn't touch but you don't find out until someone actor tries to do that the offended the rows there can be a lot of barriers to entry so I mean by barriers to entry is excuses for you to not we follow proper CI process and the big 1 that I found was a lot of credential management so usernames and passwords love website that you have to log into the other other other you know media build account all these things that you have to remember it track of you have to be able to log in to to do the and maintenance on your project and can be can be a real pain in the butt so that's why I try to make the right process here no matter what it is for for us for you the right process needs to be simple it needs to be and as as low cost to your developers and to the people on the project as possible and then the problem is my manual steps as you can automation is really the key for repeatability reducible relief disability yeah yeah so the promise of course resources it requires administration patches updates down times and and then maybe you cannot access at outside your intranet if you are working within a company a company into so the CI solution we we decided to go into I realize this until I started down this year open source of funds from scratch route but there are quite a few 0 cost market a free because there are some actual work you know that you have to do you have to be able to and you have to you know exert in order to do this so it's not it's not free but it is a 0 cost of paying for a lot of tools to t to be open source and have see I can't see I being and the big 1 that's a containerized build environment that you can I will hold your get or whatever your your framework is for for for source control and then and then build that for you based on what you told to do scrutinizes something similar astuteness supports in different languages you we use for Python mainly what I is is the best free and issue tracking management suffer that I use you get swimlanes everything is a nice and and a nice clear that is the follow very colorful presentation the cover OLS is shows you unit testing that you have under project and and what is left to the unit test where the gaps that you have and visualized and then compare the uh I just I'm throwing here static analysis typically static announces happened that the IT level and I vary is a way for you to actually have it as a service runs a service when you when you build your software very will say how many times you need you miss an area where you should check for not or should you a check for empty string and local give those defects and and give you a list and track the other approaches you can use for CI are the big big big 1 IT management so we start off with clips we have since moved to Intelligent Community idea but and have a rigorous code inspection of Stander on your on your project with with syntax dimensions so you don't have people to encode reviews insofar that reducing barriers you have people doing code reviews and worrying about if the bracket is after the function or underneath the function and also but it will enforce common things like i gives no spacing syntacticians but also the use of other certain programming paradigms like maybe we should use a for loop we use it for an enhanced for each with because using don't 1 them and then design reviews code reviews will move you point back to a talk that I saw at the phosphor G separate Cisco earlier this year where a guy from gyros talking about CI and and he said if I had to pick between you know a code review and on the and unit testing his electronic picking up a code review each time because the cost that you might have to pay for a a bad piece of code that you cannot that a human being that look and see this is wrong is far higher the which is the you know someone that's in maybe a in n log n R a M and N of polynomial time functions for a loop when H really shouldn't on that right that's the kind of thing you're trying to check for you not try to check for a code review on a lot of in a small syntaxes you're checking for huge issues that you unit test probably won't catch I yeah so how target the chart too much and this just you visually by how company mitigate these these issues so you know if using get hubs with the resource control you can have that a lot of that that 1 log a single signer of framework that you can rely on to log in things like lawful organ of things like Travis and your IDE i is my favorite way of of mitigating factors if using services and putting all this to to services that the company in you know there's a lot of there there there are a lot of ways that you can get all these marks and mitigate these so these risks and as a as best as possible the static analysis you can 1 static analysis on your ideas as well and and it's going to help you also with regression so if we compare our services what Travis CI is is I feel better than in a lot of other competitors out there for what it does which is we typically for just building Java scrutinizer is very good as well so gives you what Travis doesn't give which is the code quality so how how well is your written for Python especially it's nice because it will tell you you know you're using on Python again is now being idiomatic in your Python development not using the with statements you're not you you you you that decoding job in Python right you a new kind of whether you want to take advantage of some of the idiomatic Python and things that that language gives you to help with the code 1 there because of Python unlike in a synthetic tackling like job and I can make a huge difference and then cover also really the best code coverage analysis tool that's there and then this very popular music using that the euro or or something and then a waffle I and I haven't found a better for over or even a similar the issue management applications the I so how do I get travesty I want you to work on my project will it's a pretty simple workflow if you have dependencies you need to installed so it's going to boot up your container you install your dependencies other with a script or maybe you have those dependencies checked in locally on your work on get outside or under under source control then I recommend you test 1st that your code compiles as you need a run unit tests we get the code doesn't even compile in the 1st place was that the other way when you test suite and then create a code coverage of works from that test we did tell you how much of your code is covered by the test that your team has written and then you wanna submit that could provide report to a service like overall so you can easily visualize it having to go to an XML file very deep within your your target directory of of what you build units that that I would consider of various the there is visualized for for
our project what that look like in telling it on my languages job I wanna use the latest GDK from Oracle here are my dependencies in the Linux shell scripts and may even has a test a pilot in escape the tests and the Javadoc generation and in a very verbose about what's happening and and once that's good it will run the script and I will test and then after success it's gonna leverage cobertura which is going to give us how much of our who discovered and we have have used over terror because the report aggregation in many projects we used and they were going to catch directory so we have the pull in all those dependencies once again every time we build 4 pi
bonds it's even simpler you just tell it I wanna aware of this is applied on a of build and then I want to test on by the 2 7 and 3 4 you can even say latest if you want to test on the latest version of I have a tell you when those issues I you can give him provide on specially kept of you know verbose instructions in in installed selected wage ratio means like a shell command here that installed a new dependencies state tax followed the dependencies in case that you have that you want to install to cover all of it could be part of that depends on text and then you run attested to the lon apply Python test frameworks reason contest here and when we tell it we want to test our files package application found and then give us a kiss report and submit that long after all that is done yeah so I
thought brief scrutinizer you just point should not have to worry about for free tho is an old rather everything and it will enable us but you echo quality analysis at much like a static analysis and it will give you a score of 1 that's our 0 10 how well your code and uh is is made of so I think were like about an 8 8 may be close 9 hours of of some some issues with working with you know g of the tiles and somebody'll stuff that we got and had had worked with while attracts you get have issues so you don't have a doing things specific it'll lose anything if you if you don't have a waffle up everything as actually already in get help waffle does reaches back to get home and an aggregated all the issues that you have in an than that for you very nicely so major customizable I have also mind set up so that when ever a pull request is made and it will automatically take that pull request move it to the code review US swimlane and and and and q the appropriate tag so that we are team has a nice little indication of what has to be code review what is on the plate for for the team to look at the it can aggregate multiple board so we have multiple repositories that we work with for various reasons and are both public and private so if you log in with the giver of the edgels over or you can but look at bay in aggregation of all the issues of globally for the the repositories were interested I talked about corals vision here visualizations of you or your code coverage and and with that 1 row and I think about this and this is that the support for the systems body it's ice age that working and then In over 1 reason I like to go back to 2 2 to turning off and turning it back on so that I can always say is working how % but on what will do is you will put a pull request and and then cover all will will take will post to your of all request saying and coverage went up 1 % or code-coverage went down or you know warning this just in this area out yeah and so very on 4 so that the barrier to keep a separate branch because you can't you can't call covariate each time you do you do a push or a pull and they want they want limits like 3 requests a week so I keep a separate branch and then I just MergeMaster into that when I want to and and will never work it looks like the effects of a lifetime of the of the project so what are the best practices that I would like to recommend to you for implementing but continues integration within your open source project so your work the ID is the 1st line of defense this is this is the offline and you know the ground 0 4 where you're doing your development so it makes sense that this is the 1st place that has to get the majority of the bugs out of the way before it even reaches reveals us so she code inspection files in your version control system this is huge if you're if you're Intelligente the idea folder and make sure that is checked in and make sure that you're your developers actually have that selected as a profile to to apply to your project so that everyone is doing the same thing everybody has the same areas in and tell them you know 0 error 0 warnings and make sure that that that build system is not complaining about anything that you write hydrazine text editor and number of blood meals and myself is above them is my favorite or you're using sublime there are plenty of other frameworks for getting your limiting for your error checking are in those in those platforms let him pilot those types of things will will all give you those those errors or those those warnings that you need to pay attention to and then Custom Builders tailored to your workflow is going to depend on the team so you need the the team needs to to you move data around this this is the data have to look a certain way before you you start to build or does it have to be reset and you can actually tell your IDE run a script here before after or intervals when you when you're working so you guys even kick in kick off maven which is what we've been doing even using and that she forgot maybe for a project to do other things of data repositories locally in in globally the but I will stress the effective use of get have a suitable using a have a lot ICT Huizinga how poorly them even more and do not commit to master height this is this is a 1 of the most important thing I want you to take away here committing master is is just asking for trouble right you're not going to get that you're you're gonna push to that is until you break before you can do anything about it so always pull request even if you were to maintain or even if you are the person doing day-to-day stuff if your master builds and builds correctly with a real system you pull request that way you can do any is encoded using the death of the of the master and the branch of working in and it will tell you if the push that you made on that branch broke or if when it is of merge back into master will it break there so they could break into different spots in it will do the both of those checks for you before it ever makes it into masters any major labels releases the milestones to to add up and if you therefore get have you have the ability to look back in history and say will release 1 . 0 didn't have this but maybe something we did later on I added this box of you act and get and check that out and in work with it and do some other more powerful get commands to figure out what's going on testing you money I was the stable over the so that means we all know a lot about unit testing test as much as you can and integration test will reach across your code to other things databases web servers that type of thing and your acceptance testing if you want to simulate user something like a lot framework would be very beneficial code coverage report with visualize and what the team is may prefer unit test and static analysis we can catch back coding practices early and logical errors of like no null checks there's about nature then you should use 1 static analysis framework multiple can can be beneficial don't go crazy don't have 10 right but maybe you straight or may be used to or maybe use the ones you like the most make use the 1 that's the most beneficial to you and what did have a really nice Free Documentation with the support you can download the wiki yourself edit metadata and raw or you can use the web framework for for an for editing that in marked down or whatever you're comfortable with and so you can use that just as I know you have a mark down her folder have as a really nice way of detecting what's in your view in your folder on when you're in the browser and then if it's something it supports visualizing like in the case of duties on so to to conclude that there's a lot to think about with the build system and can be quite complicated and open source software that has it has a great because all these things just free and they're they're really industry class the of the of the of good stuff cutting edge of really solid and there's really no reason why you should be using them and integrating follows jagged bits yeah practices then you will will have much better reproducibility much better results so and you know it's not given will I've done there were more done you know writing a code there's there's a lot to think about after we've written a code submitted and this is the type of thing that I want 1 were to think about and and worked on and then I hope you purposes beneficial turning any questions yeah I but there's no questions about anything 1 letter come finding undermining the winner Jack thank you the fact that if