By Steve Endow
If you're lucky, there's GP 2010, 2013, and 2015. Visual Studio 2010, 2013, and 2015. If you aren't lucky, you've still got GP 10, or earlier.
Plus there's Analytical Accounting, Project Accounting, Manufacturing, and other lesser used modules, which are hassles unto themselves.
Then there are those clients with rather involved environments or third party modules or web services that are dependencies for your development.
How do you manage the many environments required to be a Dynamics GP developer for many customers?
When I first started using Hyper-V, I believe had one general purpose GP 10 development VM. I would then build a separate dedicated VM for some customers. Building customer specific VMs gets old pretty quick. It takes up quite a bit of disk space, and if they aren't frequently used or dormant for a year or more at a time, they become an administrative hassle.
I've now streamlined my VMs a bit and have what seems like a more manageable VM setup, but it isn't perfect. I now have a total of 19 VMs setup on my server, but fortunately I only typically use 9 or 10 of them.
My primary VMs are:
GP2010 - Primarily VS 2010
GP2013 - Primarily VS 2013
GP2015 - Currently VS 2013, but hope to start using VS 2015 soon
GPPA - For Project Accounting, with GP 2010, 2013, and 2015 all installed in separate SQL instances
GPAA - For Analytical Accounting, with GP 2010, 2013, and 2015 all installed in separate SQL instances
I still have a few client-specific VMs. One client used Project Accounting, but I just transferred that code to my GPPA server. It's very difficult to test customizations and integrations without the client's database, but so far it has been managable.
The other client specific VM has a pretty elaborate HR + Payroll setup in GP. I could potentially migrate that one as well, but will probably wait until they upgrade to GP 2015.
While my "consolidated" VMs, one for each version of GP, generally work, there are some drawbacks.
1. It's often difficult to remember which server any given client project is on. Was it GP 2010? Or did they upgrade? Did they upgrade to 2013 or 2015? I often have to dig up my documentation on each project to see what version the customer is on.
2. Third party products are a hassle on a shared VM. For a GP 2013 customer, I have a third party product that has a dictionary, AddIns, and a web service. Sometimes I have to disable the third party products to work on other client projects, as they change or disable standard GP functionality.
3. Multiple projects on one GP instance can be a hassle. If I have 5 customizations using Modifier, but need to DAG just one, I have to make a backup of everything, strip out four of those Modifier customizations, and then DAG the single modified form. Then I eventually have to go back and reimport the other modifications. Or if I need to test something on an unmodified form, or make a new customization of the same form, I have to swap between them. It can get messy and is difficult to keep such an environment clean and organized.
4. I've been trying to dig into SBA, and given its setup requirements, I've put that on a dedicated VM so that I can have Active Directory, IIS, and all of the other pile of prerequisites that it requires present without having to mangle my other VMs or create any dependencies on other VMs.
5. Given the size of the consolidated VMs, the 16GB in my current server limits the number of VMs I can have running at once. So I regularly have to save one VM before launch another one. I'm planning on upgrading my server to 32GB, which should resolve this limitation.
There are other small annoyances, like managing different types of test data, but these are five that happened to come to mind at the moment.
I have never really looked into Diff Disks or whatever they are called now with Hyper-V. If I were a Hyper-V guru, I suppose there is some option to have a base VM and then work with the multiple diffs, but I don't know how much easier that would be to manage multiple Diffs, or if performance would be an issue.
Anyway, I'm curious if anyone has any tips or techniques that has made managing multiple Dynamics GP VMs for multiple customer projects more manageable or easier.
If you're lucky, there's GP 2010, 2013, and 2015. Visual Studio 2010, 2013, and 2015. If you aren't lucky, you've still got GP 10, or earlier.
Plus there's Analytical Accounting, Project Accounting, Manufacturing, and other lesser used modules, which are hassles unto themselves.
Then there are those clients with rather involved environments or third party modules or web services that are dependencies for your development.
How do you manage the many environments required to be a Dynamics GP developer for many customers?
When I first started using Hyper-V, I believe had one general purpose GP 10 development VM. I would then build a separate dedicated VM for some customers. Building customer specific VMs gets old pretty quick. It takes up quite a bit of disk space, and if they aren't frequently used or dormant for a year or more at a time, they become an administrative hassle.
I've now streamlined my VMs a bit and have what seems like a more manageable VM setup, but it isn't perfect. I now have a total of 19 VMs setup on my server, but fortunately I only typically use 9 or 10 of them.
My primary VMs are:
GP2010 - Primarily VS 2010
GP2013 - Primarily VS 2013
GP2015 - Currently VS 2013, but hope to start using VS 2015 soon
GPPA - For Project Accounting, with GP 2010, 2013, and 2015 all installed in separate SQL instances
GPAA - For Analytical Accounting, with GP 2010, 2013, and 2015 all installed in separate SQL instances
I still have a few client-specific VMs. One client used Project Accounting, but I just transferred that code to my GPPA server. It's very difficult to test customizations and integrations without the client's database, but so far it has been managable.
The other client specific VM has a pretty elaborate HR + Payroll setup in GP. I could potentially migrate that one as well, but will probably wait until they upgrade to GP 2015.
While my "consolidated" VMs, one for each version of GP, generally work, there are some drawbacks.
1. It's often difficult to remember which server any given client project is on. Was it GP 2010? Or did they upgrade? Did they upgrade to 2013 or 2015? I often have to dig up my documentation on each project to see what version the customer is on.
2. Third party products are a hassle on a shared VM. For a GP 2013 customer, I have a third party product that has a dictionary, AddIns, and a web service. Sometimes I have to disable the third party products to work on other client projects, as they change or disable standard GP functionality.
3. Multiple projects on one GP instance can be a hassle. If I have 5 customizations using Modifier, but need to DAG just one, I have to make a backup of everything, strip out four of those Modifier customizations, and then DAG the single modified form. Then I eventually have to go back and reimport the other modifications. Or if I need to test something on an unmodified form, or make a new customization of the same form, I have to swap between them. It can get messy and is difficult to keep such an environment clean and organized.
4. I've been trying to dig into SBA, and given its setup requirements, I've put that on a dedicated VM so that I can have Active Directory, IIS, and all of the other pile of prerequisites that it requires present without having to mangle my other VMs or create any dependencies on other VMs.
5. Given the size of the consolidated VMs, the 16GB in my current server limits the number of VMs I can have running at once. So I regularly have to save one VM before launch another one. I'm planning on upgrading my server to 32GB, which should resolve this limitation.
There are other small annoyances, like managing different types of test data, but these are five that happened to come to mind at the moment.
I have never really looked into Diff Disks or whatever they are called now with Hyper-V. If I were a Hyper-V guru, I suppose there is some option to have a base VM and then work with the multiple diffs, but I don't know how much easier that would be to manage multiple Diffs, or if performance would be an issue.
Anyway, I'm curious if anyone has any tips or techniques that has made managing multiple Dynamics GP VMs for multiple customer projects more manageable or easier.
Steve Endow is a Microsoft MVP for Dynamics GP and a Dynamics GP Certified IT Professional in Los Angeles. He is the owner of Precipio Services, which provides Dynamics GP integrations, customizations, and automation solutions.