This is a question that I get asked from time to time, usually after someone who is not familiar with the deployment world encounters problems with a certain installation. “We could just write a script that extracts the files to the right place, what’s the big deal?”
Well, it’s a big deal. Generally speaking, an installation framework (compared to a script) provides a lot of benefits, such as:
- Modelling the application deployment into sub-modules – allowing to add or remove parts of the applications, define dependencies etc.
- Built-in support for many deployment actions – from simple things like copy files, edit text files, or run some OS command, to configuring web servers and databases
- Ability to rollback each action – which gives you the ability to rollback changes in case of installation error, and provide an uninstaller, with (theoretically) no additional effort.
- Built-in detection of files in use, including the ability (in some cases) to replace such files (upon reboot, or by automatically restart the interfering process)
- Various levels of UI (from completely silent deployment to a full user-driven interface)
- Versioning and update management (upgrades/patches)
- Built-in logging
- Integration with the Operating System software management tools (such as the ‘programs and features’ in Windows)
- And more… (your comments are welcomed)
So, it’s so great, so why not everyone love it?
- Everything I said above it true if you use the built-in actions. Once you start customizing and adding your own actions, it’s your sole responsibility to support abilities like rollback support, logging, dependencies etc.
- Customizing – and troubleshooting – requires a low-level understanding of the technology which can be immensely complex or just weird.
- In some cases, getting an installer up and running could be a daunting task (but, once you got it working, updating and maintaining it is usually easier)
One last thing, with today’s trends of CD and containers, many people see installers as a thing of the past, a necessary evil which eventually would be gone. I am more skeptical. At least some of the benefits I listed above hold true for any kind of deployment – most importantly, the ability to rollback and the ability to update (which is not ‘delete and re-deploy’ – in most cases you need to keep the user’s data and configuration unmodified). So in some form or another, installation technologies are here to stay.