We have reviewed the tools than can accompany our code from creation to production.
Whatever happens after we commit and eventually approve our code can be automated.
It is basically a matter of executing commands on local or remote systems that use tools like the ones we have seen in this chapter for the various stages of a deployment workflow.
Once we have these single bricks that fulfill a specific function, we can automate the whole workflow with a Continuous Integration (CI) tool that can run each step in an unattended way and proceed to the following if there are no errors.
There are various CI tools and services available; we will concentrate on a pair of them, particularly popular in the Puppet community: