- Source code can easily be version controlled with a Version Control System .
- We can control the version of artifacts using Maven and the maven-release-plugin. See Organizing Maven projects for details on how to structure your Maven projects to achieve releasable artifacts.
- All applications needs some sort of configuration.
- In a non-distributed system the configuration can probably be version controlled much like the source code, since all configuration can be found in one place.
- In a distributed system, however, the configuration is needed in multiple locations. If we want to control and track changes to the configuration of the system as a whole we must have a way to tag the configuration of all the nodes with a shared version.
- The base system is the final piece of the puzzle. I presume there exists some sort of software to ensure complete control of operating system, installed software and their configuration. An alternative approach is to create the means to easily get back to a known state. In this context this means fully automating the installation of the base system. This can be achieved by scripting the installation or by cloning images ("ghosting").