We have previously implemented CI/CD for Ensemble using GitLab hooks where we had One Production file - MyProduction.xml in all branches (Dev, Test, Prod) but developers merged Items that they built (new Business Services , Processes etc) into the Production class from another branch (for ex - Dev branch to Test Branch production class) and commit taking the changes to the higher branches. I have also seen customers having Three production classes in the names of the Servers eg - Dev.xml, Test.xml , Live.xml under production folder in Studio. And run only on production on each Server based on if it is Dev or Test or Live Server . This gives access of these files to all Devs so they merge changes under one place and keep it in all Branches.
My Questions are -
1) What according to your experience is the best way to structure the presence of the Productions class when it comes to Branching in Version control? i.e. what would you recommend as the best strategy around branching for storing the Production class?
2) In regards to CI/CD what would you recommend as best practice around configurations of the Production class when they are deployed across different servers?
3) If the new version released by a Developer is not just about addition/creation of new classes but also about Deletion of existing classes is a Fresh/Clean Build (after deleting all) the best option to overwrite the previous version on the server? Or there is a better approach to Deploy the new developed code to the specific environment?