And here is Juho, one of our programmers who is currently working on CD2 PSVR build. He is also responsible for our build automation and promised to write a few words about it. Take it away Juho!

 

How can small game developers test over 10 different builds every week on 3 different platforms and still be efficient?

Answer is automated Continous Integration and Continous Delivery systems, CI/CD in short.

In a regular building that is done on a local machine, Unity building uses all of your performance and you aren’t really able to do any other tasks during it. This is a massive waste of time. Let’s say you need to make 10 builds a week. Each manual build can take 20min for the build and 5min for distribution after. Then you multiply it by supported platforms. With just Steam and Quest that would equal over 8h per week with, that’s a whole workday wasted!

 

In February, we decided manual builds are way too inefficient, and I was assigned a task to create CI/CD system for Cave Digger 2. Now when one of our developers makes a git tag commit, after 40 minutes we have a fresh version available on Steam, Oculus Quest, and Oculus Store development branches fully automatically. But how does it work?

We first needed hardware to run our build server, so we took one of the unused PCs around the office and installed Jenkins on it. Jenkins was our choice of automation server due to being open-source and I had previous experience fiddling with it. Jenkins is the brain of the system and can control multiple workspaces. Workspace checkouts inputted git tag and run Unity from the command line with correct arguments making a build. After the build is completed Jenkins executes .bat file that will upload our versions to Steam, Oculus Quest Store, and Oculus Store. Then it just creates a Slack message letting us know if the build was a success or failure.

 

 

What have been the benefits of running it almost the entire year? In 11 months we have had 218 builds be done by Jenkins. That equals 181 working hours in a year! And unlike a human, it never forgets small steps like removing unwanted files for other platforms that would uploading files fail. The first few months it was still in a testing phase, it was quite fragile to fail. Once we had proven CI/CD system benefits for Cave Digger 2, it was transferred to a more permanent home. We had some old components around the office and a case, so we built a new server from those with a few new components to help reduce build times even further.

 

Here’s Tiina the modeler jealously guarding the Jenkins PC in the lower right corner.

 

 

Are there other uses for it? Our system currently only supports Steam, Quest, and Oculus Store platforms, but it is easy to expand to even more platforms. By just changing upload bat we can add Epic Games Store and GOG platforms to wider Windows support. The easiest platforms to implement out of the box are Android, Windows, Linux. Then there are other platforms that are a bit more tricky to set up like iOS and MacOS would require an additional MacOS-based computer for building because of software limitations. Also, Xbox and PlayStation support would technically be possible if you can make Virtual machines or secondary computers for workspaces to allow avoiding Unity license restrictions. That means you could support 7 major gaming platforms with a single action from the developer.

Where to next?

Right now, CI/CD system is integrated for Cave Digger 2 Project, but I really hope we can expand it for all of our future game projects. Also, it’s possible to expand to B2B side of MeKiwi to decrease cost and save time on their projects, as Jenkins can support multiple projects being run at once and queue them accordingly. When working on mobile products for clients, we usually have to support iOS and Android simultaneously. This can especially benefit those projects by saving time and allow correct build to be always available for testing. We have also been thinking of expanding support to other platforms for Cave Digger 2, but I am not going more depth about it right now. 😉

That’s all for now,
– SolidJuho

Random development quote: “Antakaa minulle tarpeeksi iso crankki niin siirrän maailmaa”.