[QA] How Zuul gating works (on +2)

Antoine Musso hashar+wmf at free.fr
Fri Sep 4 10:22:02 UTC 2015


Hello,

This is a mail I sent a month or so ago to the Release Engineering
internal mailing list.  Kunal Mehta pointed out it is worth publishing
for later reference.

It follows up the previous mail 'Jenkins API and Zuul Gearman'
https://lists.wikimedia.org/pipermail/qa/2015-September/002372.html


I wanted to highlight a couple nice features in Zuul:

* the merging queue and testing changes in parallel
* cross project dependencies


When folks +2 changes, they are inserted in a queue and Zuul craft merge
commits that speculate a change ahead in the queue will be merged.

So once you have change A, change B will be tested as if A is a success.
 Thus it runs in parallel:

 A
 A + B

If both run pass, both changes get merged.  If A fail, A + B is
cancelled and B reinserted in the queue.


That becomes a bit more complicated when you have several git repos
sharing the same queue.

 A on mediawiki/core
 B on extension

To test B, Zuul crafts a reference for mediawiki/core that contains A
and thus B is tested with:

 mediawiki/core @A
 extension @B

If A fails, the job for extension change B is canceled and reinserted
with mediawiki/core @master.


So B might well pass with mediawiki/core @master. But if A introduces an
incompatible change in mediawiki/core B will fail the test because it is
tested with A.


That is the purposes of the mediawiki-extensions-* jobs that test
together a chunk of extensions making sure they all work well together.


The doc is
http://docs.openstack.org/infra/zuul/gating.html


My point is that this feature caught a bunch of issue for Mobile already
and I dont think anything but Zuul propose such a system.

-- 
Antoine "hashar" Musso




More information about the QA mailing list