Automated testing of code is awesome, but testing code after it has merged somewhere is a little late. What you want to do is test code before it lands in the first place. While testing proposed changes is a good step in the right direction, testing them as submitted is still flawed, as you are testing an arbitrary state containing the change, not the actual future state that would result from merging the change. To correctly test the future state, you need a Project Gating System.
Zuul is a Project Gating system developed to handle this. It uses Ansible for Job execution, handles cross-repository and cross-source dependencies, supports a combination of self-testing centralized and distributed job configuration, and is proven to operate at massive scale.
As powerful as Zuul is, it's actually fairly easy to get started. We'll talk a bit about why Zuul does what it does, then step through a quickstart demo that goes from nothing to a fully operational gating system.