| :title:Introduction |
| |
| Turbo Hipster |
| ============= |
| |
| Turbo Hipster is a gearman worker designed to run tests using zuul |
| as the gearman client. It is primarily aimed at running openstack |
| continuous integration tests against pre-existing datasets but can |
| be used to automate any tests with zuul. |
| |
| Overview |
| -------- |
| |
| The zuul server receives jobs from a trigger requesting particular |
| jobs/tests to be ran. Turbo Hipster is able to provide a worker for |
| each of those jobs or a subset and report the success/failure back to |
| zuul. zuul will then collate responses from multiple workers and |
| build a report. |
| |
| Typical workflow diagram |
| ------------------------ |
| |
| **clearly this needs a lot of work, however I believe the structure |
| is mostly there... If you know graphviz please help!** |
| |
| .. graphviz:: |
| |
| digraph overview { |
| subgraph cluster_1 { |
| label = "Gerrit" |
| style = filled; |
| color = lightgrey; |
| node [style=filled,color=white]; |
| |
| g000 [shape=Mdiamond label="start"]; |
| g001 [shape=box, label="receive event"]; |
| g002 [shape=box, label="notify listeners"]; |
| |
| g000 -> g001; |
| g001 -> g002; |
| g002 -> g001; |
| } |
| |
| subgraph cluster_2 { |
| label = "Zuul pipeline"; |
| color = blue |
| node [style=filled]; |
| |
| z000 [shape=Mdiamond label="start"]; |
| z001 [shape=box, label="register gearman server"]; |
| z002 [shape=box, label="register launchers"]; |
| z003 [shape=box, label="listen for events"]; |
| z004 [shape=box, label="receive event"]; |
| z005 [shape=box, label="request jobs"]; |
| z006 [shape=box, label="receive response"]; |
| z007 [shape=box, label="send report"]; |
| |
| z000 -> z001 -> z002; |
| z003 -> z004 -> z005; |
| z005 -> z006 [dir=none, style=dotted]; |
| z006 -> z007; |
| |
| } |
| |
| subgraph cluster_3 { |
| label = "Gearman"; |
| style = filled; |
| color = lightgrey; |
| node [style=filled,color=white]; |
| |
| gm001 [shape=box, label="receive job method"]; |
| gm002 [shape=box, label="request worker do method"]; |
| gm003 [shape=box, label="receive results"]; |
| gm004 [shape=box, label="return results"]; |
| |
| gms000 [label="register client"]; |
| gms001 [label="register worker"]; |
| gms002 [label="register method"]; |
| |
| gm001 -> gm002; |
| gm002 -> gm003 [dir=none, style=dotted]; |
| gm003 -> gm004; |
| } |
| |
| subgraph cluster_4 { |
| label = "Turbo Hipster"; |
| color = blue |
| node [style=filled]; |
| |
| th000 [shape=Mdiamond label="start"]; |
| th001 [shape=box, label="register as worker"]; |
| th002 [shape=box, label="find available tasks"]; |
| th003 [shape=box, label="register available job methods"]; |
| |
| ths001 [shape=box, label="receive method request"]; |
| ths002 [shape=box, label="run task"]; |
| ths003 [shape=box, label="send results"]; |
| |
| th000 -> th001 -> th002 -> th003; |
| ths001 -> ths002 -> ths003; |
| } |
| |
| z001 -> gms000; |
| z005 -> gm001; |
| gm004 -> z006; |
| z003 -> g002 [dir=both, style=dotted]; |
| th001 -> gms001; |
| th003 -> gms002; |
| gm002 -> ths001; |
| ths003 -> gm003; |
| |
| } |
| |
| zuul integration |
| ---------------- |
| |
| Explain how zuul triggers builds and gates etc and how turbo-hipster |
| responds to them. Most of this is in the zuul documentation so don't |
| duplicate. |