Thursday 27 March 2014

Continuous integration

One of the tricky tasks with creating opensource software is building opensource software. I'm a big believer in continuous integration. This is the idea that everytime the code is changed, a build is performed by a build server and all the tests are run. Typically the server will notify people who checked in code and failed the build.

For a while now, I've been using Jenkins at home to build my projects. I've also been using it at work. This is a great which a massive feature list due to it's plugin architecture. It's been pretty useful at work where I have a lot more resources to host it on, but at home it was always a struggle to fund machines need for building things.

Since moving to using VM's on my server at home, I've been able to build my projects without to much problem and make sure they are fully tested. Successful builds get uploaded to a public section of drop box. This allows users to download nightly builds that have been fully tested.

Some of my projects such as the AtomicParsley fork or itunes remote server, need windows to build them. This is where I really start to run into problems. I'd have to pay for another windows license to run windows in a VM (A least thats my understanding). This would have to be done for each windows VM. Since they are not used for much else, this seems a waste of money.

It was for this reason that I was very happy to discover AppVeyor. This is a continuous integration service that can build windows software. It's a shame that it can't build linux software as well, but their are other service providers that can. I can also build Linux software on my home Jenkins system.

To test out AppVeyour I connected it to my bitbucket project for my AtomicParsley fork and set up the build. I ported the build of AtomicParsley over to cmake a while ago, which made building it really easy. My build script looks like this:

 mkdir build  
 cd build  
 cmake ..  

Imaging my surprise when it built. Next step was to configure the build artifacts. These are the things that are collected after the build has finished. So in this case, the AtomicParsley.exe executable. I shall have to look into publishing he builds as the next step.

I've also been looking into cloud solutions for building Linux software codeship looks promising and their support team have been very good. I'm testing this using my MediaManager project which is a much more complicated project. I'll blog more on this when I get things working.....

No comments: