Project GAIA

Ivan Kenneth Wang
Ninja Van Tech
Published in
3 min readMay 21, 2020

Giving birth to an entire environment with a single click with Bamboo, Ansible, Kubernetes and Docker.

In Ninja Van, we have a culture of challenging ourselves to improve things — big or small. One of which is Project GAIA. Continue reading below to find out the WHY, WHAT and HOW of Project GAIA.

First of, Why?

Solutions are usually created to increase productivity. And it is not so different in Ninja Van. Here are the top 3 reasons why Project GAIA was built.

Figure 1: Reasons for building Project GAIA
  1. Parallel Releases
    In Ninja Van, we pride ourselves in having a culture of moving fast. Simply, we develop multiple features in parallel across multiple engineering teams.
  2. Hot Fixes
    How about staging environment? However, as described in reason 1, our staging env is full of new features and results of testing a small fix could be inaccurate.
  3. New SAAS
    Believe it or not, the Ninja Van infrastructure powers some of the SME not just in South East Asia, but all over the globe. Setting up a new environment can sometimes take up to a month of developer man-hours.

Next, What?

Project GAIA is all about spinning up the entire Ninja Van tech infrastructure with just a single click of a button. But before that, let me share with you how our tech infrastructure looks like.

Figure 2: GKE Clusters of Ninja Van

We run multiple GKE clusters (within GCP) serving several environments such as Management, Development, Sandbox, Production and more. Management GKE, like the label says, runs our management services such as Jira, Bitbucket, Bamboo, Confluence, and more.

We use Bamboo as our CI-CD server that is hooked with our Git repositories served by Bitbucket.

Last but not the least, How?

Figure 3: Project GAIA Overview

Re-inventing the wheel is such a waste of man-hour resources. Thus, we take advantage of our existing Bamboo server.

A new build plan is created to allow our engineers the freedom to spin up the entire environment based on their requirements. First is to specify the environment name. And second is to specify the git branch of every microservice (frontend/backend) to be deployed.

This plan is configured to run an Ansible playbook that does the following:

Figure 4: Run customised in Project GAIA
Figure 5: Set custom variables
  1. Take in variables from Bamboo as shown in Figures 4 and 5.
  2. Trigger build of DevOps build plans
  3. Create branch plan for all existing microservice build plans
  4. Create deployment plan tied to each microservice branch plan created
  5. Enable auto deployment after every successful build
  6. Trigger build on each microservice branch plan

More details on each section of the architecture soon. Subscribe today to never miss an update from us.

Have questions /suggestions? Comment and I’ll do my best to answer them.

--

--