Decoupling data of devops tools eg jenkins nexus
You might want to explore immutable architecture.

Steps


CI with static analysis(Sonarqube, because free!), pushing version artefacts to Nexus. 
Base Image using Packer. These must be revisited from time to time. Base Image has security hardening, log shippers, monitoring tools etc. 
Environment/Application specific images from Base image.
healthCheck and version API for each application(healthCheck API in deployment and version for visibility of code in different VMs).
Deploy App using Terraform and Ansible.


Can use Jenkins 2.0 (pipeline as code) to achieve points 1,2,3. It can be part of each application itself.

Let me know if this answers your question.