Welcome to the Inedo Forums! Check out the Forums Guide for help getting started.

If you are experiencing any issues with the forum software, please visit the Contact Form on our website and let us know!

Deploying a Multi-Instance Application



  • I have another strange requirement for one of our applications. As this is an old legacy application, it was not designed with multi-tenancy in mind so for each customer and each country we basically have to install a new copy of the application on the same server. Therefore we have one copy of the application folder per customer per country.

    I am wondering if / how we could use Buildmaster to then upgrade all customers easily by upgrading all copies of the application.

    Example Folder structure

    *Application

    **Customer1

    ***Country1 (Install Copy 1)

    ***Country2 (Install Copy 2)

    **Customer2

    ***Country1 (Install Copy 3)

    ***Country2 (Install Copy 4)

    We would want to upgrade all Copies of the Install.

    Product: BuildMaster
    Version: 4.9.5



  • This is actually a fairly common requirement with BuildMaster, and we have a lot of users who implement this in a lot of different ways. Here are the main two approaches.

    Different Versions for Different Customers

    If there is a possibility that customers will want to receive different versions of your application at different times (e.g. they may coordinate an upgrade), then the best bet is to set up an application for each customer, and then "import" the deployable from the main (customer-less, or standard) application; you can use a "controller" application of sorts to automate the build/deployment of these customer applications, or use the api.

    This approach will also enable "quasi-custom" software, and let you build customizations on top.

    All Customers, Same Version, Always

    If this is the case, then this is simpler on the administration side, but it can be a bit tricky on the implementation side, as there are several challenges.

    • First, you will need to deal with the problem of adding a new customer; maybe it's not so bad, and you can do a manual copy; if you are adding several customers a day, maybe it's a problem
    • Then, there's the problem of rollout; do you take down every customer site at once, then upgrade, then turn them on? Or do you do a more rolling strategy (one at a time), (five at a time, etc)
    • What about failure, such as if customer 33 of 58 has an error during upgrade? Do you continue with the rest, or stop the whole process

    It's hard to advise on a general approach because of these considerations. There's also scope and scalability -- are you looking at a handful, dozens, or hundreds of customers? Regardless, I would look to the features in the new execution engine, as they will simplify this problem quite a bit:

    • If you are frequently adding customers, then this is more of a "configuration management" problem, and Otter may be a good fit for the delivery aspect

    • You can create custom "Variable functions" that will allow you to use external data sources (CRM, etc) for customer lists. then you can do something like
      <pre>
      for each $customer in @GetCustomers() {
      if $ShouldDeployCustomer($customer) {
      ...
      }
      }
      </pre>


Log in to reply
 

Inedo Website HomeSupport HomeCode of ConductForums GuideDocumentation