As the development and testing of builds continues to grow not only in complexity but also in scale, the need for improved, efficient management of approvals and merges has evolved as well. This is where the concepts and practices of CI/CD tools have shown their value, and, as a result, have given way to the development of CI tools such as Zuul.
Zuul was originally developed back in 2012 for CI testing, enabling users and contributors, spanning numerous diverse organizations, to efficiently and effectively develop together across multiple projects. Essentially, the problem that Zuul was designed to solve is that of providing developers with a tool to test serialized future states faster than was possible when executing the tests serially. The concept of pipeline being borrowed from processor design provided a sort of “optimistic speculation” by which one could effectively parallelize this testing in cases where jobs were likely to pass. It later became a tool for the automatic merging, building and testing of any new changes being made to a project, delivering an automated gated workflow pipeline. It is through this gating that new code is prevented from making it to production without passing project keeper defined unit and integration tests.
Through its origins of ensuring that all the components for each OpenStack release work together, which span over 800 repositories, along with OpenDev currently hosting 2129 Git repositories, Zuul is ideal for enterprise-grade organizations running very large and complex environments. This also results in what has become Zuul’s key differentiator; co-gating. Co-gating is when multiple software is tested across numerous repositories that are all working towards a common goal, creating a failsafe testing environment as not only will a change not pass if it breaks its own project, but it also won’t pass if it breaks a different project.
Another aspect of Zuul is that it features some techniques of parallelization, enabling multiple contributors to apply code changes all at the same time. This is because Zuul itself knows where to run things as well as the order they should be run in. Zuul is also aware of the states they should be run in and the way it should respond to the results.
Zuul has had an extensive integration with Gerrit and is known for its use of Nodepool for the on-demand launch of required servers. Additionally, the latest release, Version 3, supports a much broader range of use cases and development platforms. Some of the most notable being its integration with GitHub and its ability to be used in conjunction with the Ansible project to run a job, captured within the Ansible playbooks. Moreover, Zuul makes use of NodePool for the on demand launch of its needed servers.
All in all, if your organization is looking to make the move to CI/CD in terms of your development workflow and need tools that are built to handle massive numbers of projects, that must also work in conjunction with each other, Zuul can deliver you the framework for even your most challenging projects.