Example strategy for updating many hosted environments

Preamble

The policy adopted in this example strategy is that there are two mechanisms for managing site-specific data, these are :

  1. Environment-agnostic code, configurations and settings which do not contain sensitive data (e.g. passwords) are placed in a subversion repository accessible to all servers.
    The assumption here being that subversion repository is a “public” facility which is not sufficiently secured to guarantee that portal code will be accessible only to AP-Portal developers/administrators.
  2. Environment-specific code, configurations and settings, and objects containing sensitive data, are placed in the component sub-directories of (the git-managed) ap_portal_online.

When building for a particular environment components which are …

  1. generic portal components: That component’s subversion-resident objects are overlayed over its corresponding git-managed ap_portal_online sub-directory code just prior to invoking the build instruction in the cloned git directory.
  2. site-specific: That component’s building takes place in the subversion repository code working directory.

Hardware

The example hardware configuration is as follows :

Server Environment
server1 development
server1 test
server2 production

Version control system

A subversion repository, accessible to all servers , hosts the site-specific code, configurations and settings which don’t contain sensitive data and are environment-agnostic, i.e. objects created in the development environment which can be deployed without modification during updates to test and production environments.

For example, the structure of the subversion repository would be similar to the following, whereby the <git hash> would be the ap_predict_online commit short hash used at the time of building the update :

svnrepo/client/branches
   |       +--/tags/development                    --+
   |       |    |    +-/160912_<git hash 1>          |
   |       |    |    +-/160930_<git hash 2>          |
   |       |    |    +-/161015_<git hash 3>          |
   |       |    |    +-/161016_<git hash 4>          |
   |       |    |    +-/161030_<git hash 5>          |
   |       |    +--/production                       |-- Records of historical tagged updates
   |       |    |    +-/160925_<git hash 1>          |
   |       |    |    +-/161022_<git hash 4>          |
   |       |    +--/test                             |
   |       |         +-/160920_<git hash 1>          |
   |       |         +-/161002_<git hash 2>          |
   |       |         +-/161020_<git hash 4>        --+
   |       |
   |       +--/trunk/pom.xml                       --+
   |             +--/src/main/java                   |
   |                  |    |    +-/com               |
   |                  |    +-/resources              +-- Latest development code
   |                  |    +-/webapp                 |
   |                  +-/test/java                   |
   |                            +-/com             --+
   |
   +---/site-business/branches                     --+
               +-----/tags                           +-- Bespoke site-business component
               +-----/trunk                        --+

Update cycle

Sample dev -> test update considerations

Sample dev -> test update considerations.

Sample update cycle

Sample update cycle.