Hi Gil and all,
Faced the same issues before.
I had different environments like SIT, UAT and PROD requiring different
settings.
There was also specific requirements to remove the source folders and zip the
final files for deployment.
So I created a folder which has subfolders named after each different
environment and contains the respective environment-specific properties e.g.
- deployment
- SIT
- db.properties
...
- UAT
- db.properties
...
Also created a set of template files that contained placeholders to be replaced
during deployment
- templates
- entity-engine.xml
...
Finally there is a custom Ant target for deployment to each environment that
will:
1) build OFBiz and copy the required files (leaving out the source folders)
into a build folder;
2) read the template files and replace the placeholders with the right
environment properties before copy to the correct location in the build folder;
and
3) zip the contents of the build folder and append a timestamp.
Having said all these, your approach is convention over configuration, and
keeps the environment properties separate from the OFBiz folder. So
+1
from me.
Regards,
James Yong
On 2017-07-05 23:36 (+0800), gil portenseigne <[email protected]>
wrote:
> Hello all,
>
> Working with different hosting companies, we used to have issues when
> deploying OFBiz concerning technical configuration of the different
> environments.
> We are writing this mail to get feedback from the community and
> eventually propose to improve OFBiz on this matter.
>
> For a customer, we are working with 4 instances of a release 13.07
> OFBiz, and are currently using a set of patches (with addonmanager...)
> to manage environment specific configurations.
> During each production deployment, the hosting company receive from our
> jenkins a precompiled archive containing OFBiz codebase, and then apply
> the set of patches to configure it to the environment needs, recompile
> and relaunch...
>
> This way of doing can cause issue when patch could not apply, after a
> codebase modification (pretty rare but it happens).
>
> We are not satisfied with this way of doing, we are currently thinking
> about using environment variables to configure technical environment
> properties (those are on the hosting company responsibility), and to
> keep functional specifics into the code base.
> If you have some experience or advice in this matter, you are welcome.
>
> For our case, we currently have enhanced OFBiz to be able to get
> environment variable from the operating system within property file and
> some other configuration files (with default value if not set).
>
> Examples :
> *In Property file :
> password=${env:ONE_CONF:ofbiz} -> environment variable ONE_CONF or ofbiz
> if unset
> other_config=${env:OTHER_CONF:${partyId}} -> environment variable
> OTHER_CONF or ${partyId} if unset
> *In entityengine.xml :
> jdbc-uri="${env:DB_POSTGRES_URI:jdbc:mysql://127.0.0.1/ofbiz?autoReconnect=true}"
> jdbc-username="${env:DB_POSTGRES_USER:ofbiz}"
> jdbc-password="${env:DB_POSTGRES_PWD:ofbiz}"/>
>
> That allow us to keep functional parameters stored within git branches.
> Our jenkins now is able to build our 4 configured and compiled instances
> and deliver it to the hosting company, that just have to set/check
> environment variable (database access, activeMQ, log location, instance
> id, etc.) before starting OFBiz app. Now we cannot have configuration
> failure during deployment.
>
> We will be glad to contribute it, if it's the good way to go !
>
> Best Regards !
>
> Gil Portenseigne
>