All Collections
General questions
How do I manage updates to live brainCloud apps?
How do I manage updates to live brainCloud apps?

Managing brainCloud development vs. production versions of apps via the deploy feature

Paul Winterhalder avatar
Written by Paul Winterhalder
Updated over a week ago

Very good question.

We recommend that you set up multiple brainCloud apps for this purpose. A common naming convention for our devs is to use the suffixes "Dev" and "Prod" for this purpose.

So - if you're building "AwesomeApp" - you might create two brainCloud apps - "AwesomeApp Dev" and "AwesomeApp Prod".  (Remember, apps in development are free - so this won't end up costing you anything.)

Do your day-to-day development in "AwesomeApp Dev" - and when you're ready to push an update to production, use our Push Button Deployment feature:

  • Log into the brainCloud Portal

  • Select your "AwesomeApp Dev" app, and go to the Design | Core App Info | Admin Tools page

  • In the Deployment section, select "AwesomeApp Prod" in the Deploy To combo

  • Ensure the deployment options are configured correctly (see below)

  • Click [Deploy] and you will migrate the changes you have made in AwesomeApp Dev -> AwesomeApp Prod

  • Voila!

Note that performing a deployment like this transfers over the app's metadata and global files - but does *not* transfer over dynamic app data (i.e. user accounts, user files, global entities, etc.).

Understanding the deployment options

  • [x] Do not overwrite product/pricing information - Keep this checked if you have set up separate In-app purchase items and promotions for production vs. development. Uncheck otherwise.

  • [x] Do not overwrite push notification certifications - Similarly, check this if you have separate push certificates for production vs. development. Uncheck otherwise.

  • [x] Do not overwrite integrations - Keep this checked if you have separate integration settings for production vs. development.

  • [x] Do not overwrite My Servers configurations - prevents the deploy from changing the settings for your external and/or hosted servers. This is important if you have hosted servers since your configurations (minimum # servers, server sizes, etc) for production will likely be very different than development

  • [x] Do not overwrite lobby configurations - prevents development lobby settings from overwriting the production values.

  • [x] Do not overwrite Item Catalog - prevents the item catalog from being overwritten from development. You would set this if you are controlling the item catalog from the live environment directly.

  • [x] Do not overwrite Leaderboard, Tournament, etc. configurations - do not update the leaderboard, tournament, and division configuration.

  • [x] Do not delete independent Leaderboards not present in source app - check this option if your app utilizes dynamically created leaderboards.

Pro-tips

  • Double-check the settings after a first deploy. The platform settings under  Design | Core App Info | Application IDs are not written during a deploy (since it is likely those settings will be different for each app version you maintain). 

  • Set up a compiler flag that makes it easy to build a production release of your app that connects to "AwesomeApp Prod" instead of "AwesomeApp Dev". This flag should switch both the brainCloud app id and secret, and other items like push notification certificates if they differ between the two.

  • You may want to consider forcing a client update to go with the server update that you just pushed. This blog post talks about enforcing minimum client versions.

  • To transfer System Entities (which are Global Entities without an owner) from one app to another, you can use the Export / Import features under Monitoring | Global Monitoring | Global Entities.

Note that brainCloud creates a "Checkpoint" in the target app each time a deployment occurs. To go back to a previous version of the app, choose the checkpoint and click [Restore!].

Your feedback is important to us. Please rate this response below. Thanks! 

Did this answer your question?