Git - managing collection configs and deployment to different environments

Looking for guidance from the community; what is the best way to track code changes to multiple collections (some which share code, e.g. shared gscope.cfg or Filters) and deploy those to multiple servers (e.g. DEV/UAT/PROD)

We have been thinking adding $SEARCH_HOME/conf/ to GIT and using branches to track DEV/UAT/PROD code.

What do other’s do in practise?

Hi Riaan,

There’s a few approach we take when maintaining and sharing files. You can find them below:

Configs such as gscopes.cfg and metamap.cfg

We sometimes symlink all component collection configs to a designated master collection (usually the meta one). However, this approach sometimes lead to changes inadvertently propagating to all collections. i.e. If someone makes a change to the gscope config in a component collection, it will not be obvious to them that the change will also affect other collections.

You could also use a few indexer options to instruct Funnelback to look for the configs in another location.
https://docs.funnelback.com/collections/collection-configuration/indexer_options_collection_cfg.html#d-controlling-metadata-indexing

This has the benefit of being traceable via the collection.cfg

Freemarker Templates
Simple one for this…you can simple use the “import” or “Include” directive which lets you include the contents of other templates.

http://freemarker.org/docs/ref_directive_import.html
http://freemarker.org/docs/ref_directive_include.html

Great for reducing repetition.

Filters and hook scripts
Shared filters and hook scripts can be stored under $SEARCH_HOME/lib/java/groovy. They will then be available to all collections on that server. (Please take note of providing the correct package name)

collections and git

At Funnelback, each collection is its own git repository. This means that if you had 4 collections for a particular project/client, then there will be 4 git repositories. We have it like this so that servers can have any combinations of collections. This is especially useful to us as we are continually migrating collections from various servers. You could add $SEARCH_HOME/conf to git but that would mean that every server needs to have the exact same set of collections. Great if your servers are not multi tenanted (one client, one server).

Hope this helps.

~Gioan