A release is a versioned collection of configuration properties, configuration templates, start up scripts, source code, binary artifacts, and anything else required to build and deploy software in a reproducible way.
A release is the layer placed on top of a stemcell. They are self-contained and provide very specific software for the purpose of that release. For example, a Redis release might include start-up and shutdown scripts for
redis-server, a tarball with Redis source code obtained from the Redis official website, and a few configuration properties allowing cluster operators to alter that Redis configuration.
By allowing layering of stemcells and releases, BOSH is able to solve problems such as "how does one make sure that the compiled version of the software is reliably available throughout the deploy", or "how to version and roll out updated software to the whole cluster, VM-by-VM", that other orchestration software is not able to solve.
There are two common formats in which releases are distributed: artifacts checked into a git repository and as a single tarball.
By introducing the concept of a release, the following concerns are addressed:
- Capturing all needed configuration options and scripts for deployment of the software
- Recording and keeping track of all dependencies for the software
- Versioning and keeping track of software releases
- Creating releases that can be IaaS agnostic
- Creating releases that are self-contained and do not require internet access for deployment