Creating and Promoting Snapshots
Our example application is made up of a database, middleware configuration, middleware code, and static content. A release will often deploy specific versions of multiple components. UrbanCode Deploy ties together versions of these various components into a "Snapshot".
A snapshot allows us to deploy the same set of components through our higher environments (like Performance, UAT, Staging, and Production) ensuring that we continue to deploy the same components that were tested together earlier. This prevents the problem of applications failing in production because a component another part of the system was dependent on was left behind. UrbanCode Deploy understands deployment dependencies.
The simple way to create a snapshot is to base it on an environment. Essentially, the user would be saying, "I like what is in QA ... that is what I want to promote to Performance)." UrbanCode Deploy examines the inventory of the QA environment and constructs a snapshot for the user to review. Snapshots can also be constructed ad hoc by manually picking and choosing the versions that should be deployed together.
A snapshot can be deployed to target environments by users who have permission to the application and target environment. A snapshot deployment will always move the entire snapshot, although components which are already of the correct version in the target environment may be automatically skipped.
UrbanCode Deploy provides a distinction between environments that support ad hoc deployments of individual components and those that can only accept snapshot deployments. While any environment could be of either type, often one or two early test environments support ad hoc deployments while later environments and production are restricted to snapshot-only deployments for safety.
The promotion of a snapshot to an environment can be gated by approval. Users can submit snapshots for approval, for example a deployment to Production. Each environment requiring approval is associated with one or more approval roles. When an approval is requested, members of each approval role are notified and they can approve the snapshot deployment right inside UrbanCode Deploy. When all members have signed off, that snapshot is freed to be deployed to the target environment by the appropriate users.