You can use Jira as a ticketing system for managing requests and changes; in addition to that, you can have your own internal system for handling requests. After that, you can use Git and the Puppet Code Manager app to perform standard procedures with Puppet's source code management.  In addition, you should run Puppet updates via Jenkins's beaker testing framework as a part of your continuous integration process.