If you’re planning on adopting a system provisioning tool for enterprise application deployment, you may want to reconsider. There are some compelling reasons why popular tools for configuration management like Puppet, Chef or SaltStack are less than ideal for deploying enterprise apps.
Looking beyond the inevitable scripting overhead, and the workarounds you’ll need to conjure up in order to integrate everything, you should also factor these questions into your decision:
1. Do you need to orchestrate deployments across multiple machines?
Most enterprise applications are not being deployed to a single machine, or even a group of identical machines, they require different, coordinated actions to be carried out on a variety of disparate machines. System provisioning tools are focused on the machine level, effectively allowing an app to only be deployed to a single machine, or multiple clones of that machine.
2. Can you simply re-run all the deployment steps for the app all over again on failure?
Since the majority of apps are not idempotent, and system provisioning tools tend to be designed to run again if the provisioning task fails, there is a clear mismatch here. What, for instance, if your app initializes a database the first time it is run? If the deployment doesn’t work, the database changes may not be cleaned up. Can the app deployment be re-run successfully when it encounters the already present schema from the failed first attempt?
3. Can the developers provide full configuration details?
Relying on the development team to describe everything that’s required on the target machines effectively assumes that they are experts in properly configuring systems. This means taking compliance into account, including legal and regulatory requirements. You also need to consider unexpected support issues and external developers.
4. Can they cope with a rapid application lifecycle?
Coming from operations rather than development, provisioning tools are really designed to keep a system in a known versioned state. By folding application deployment in, the app version becomes part of the system configuration. In a Continuous Delivery environment where a new app version may be generated with every commit, this quickly leads to hundreds of system configuration versions to manage, which gets very messy.
5. Do they require agents?
Agents introduce security risks and inevitable overhead in terms of network traffic, system resources, and maintenance.
6. How good is their Windows support?
Most enterprises have at least some Windows servers and applications, but the vast majority of tools, especially agentless system provisioning tools, have very limited or no Windows support at all.
7. Can they separate app, middleware, and environment?
How do you quickly extract the application version from the overall machine configuration, especially if the app consists of multiple components spread across many machines? System provisioning tools will run a set of commands and move around a sets of files. There are no domain model concepts of application, middleware, platform or environment. The overall machine configuration may have a version, but which applications are actually in there?
8. Do they offer out-of-the-box content for the application tier?
Where’s the content for the application layer? Most tools will offer installation and configuration of the OS and middleware, but that’s usually it. You won’t find any significant out-of-the-box support for application deployment.
9. How well do they integrate with your build and CI tooling?
Since system provisioning tools aren’t really focused on the application layer or related functionality, you’re going to have to work to integrate them with your existing build and CI tools. It’s not easy to find an elegant solution to this. But this type of integration is critical for the application layer, because deployments are usually triggered from your delivery pipeline.
If you find yourself wondering about these questions, then it’s time to consider an Application Release Automation tool to deal with your deployments. System provisioning tools are great for configuring your target machines and setting up your platform, and thus certainly play a key role in your Continuous Delivery stack. Deployment of enterprise applications, however, pushes them beyond what they are designed to do well. Application deployment is a critical discipline that requires a dedicated approach and is better addressed by tooling designed for this task.