| Quick Start Guide |
| ================= |
| |
| System Requirements |
| ------------------- |
| |
| For most deployments zuul only needs 1-2GB. OpenStack uses a 30GB setup. |
| |
| Install Zuul |
| ------------ |
| |
| You can get zuul from pypi via:: |
| |
| pip install zuul |
| |
| Zuul Components |
| --------------- |
| |
| Zuul provides the following components: |
| |
| - **zuul-server**: scheduler daemon which communicates with Gerrit and |
| Gearman. Handles receiving events, launching jobs, collecting results |
| and postingreports. |
| - **zuul-merger**: speculative-merger which communicates with Gearman. |
| Prepares Git repositories for jobs to test against. This additionally |
| requires a web server hosting the Git repositories which can be cloned |
| by the jobs. |
| - **zuul-cloner**: client side script used to setup job workspace. It is |
| used to clone the repositories prepared by the zuul-merger described |
| previously. |
| - **gearmand**: optional builtin gearman daemon provided by zuul-server |
| |
| External components: |
| |
| - Jenkins Gearman plugin: Used by Jenkins to connect to Gearman |
| |
| Zuul Communication |
| ------------------ |
| |
| All the Zuul components communicate with each other using Gearman. As well as |
| the following communication channels: |
| |
| zuul-server: |
| |
| - Gerrit |
| - Gearman Daemon |
| |
| zuul-merger: |
| |
| - Gerrit |
| - Gearman Daemon |
| |
| zuul-cloner: |
| |
| - http hosted zuul-merger git repos |
| |
| Jenkins: |
| |
| - Gearman Daemon via Jenkins Gearman Plugin |
| |
| Zuul Setup |
| ---------- |
| |
| At minimum we need to provide **zuul.conf** and **layout.yaml** and placed |
| in /etc/zuul/ directory. You will also need a zuul user and ssh key for the |
| zuul user in Gerrit. The following example uses the builtin gearmand service |
| in zuul. |
| |
| **zuul.conf**:: |
| |
| [zuul] |
| layout_config=/etc/zuul/layout.yaml |
| |
| [merger] |
| git_dir=/git |
| zuul_url=http://zuul.example.com/p |
| |
| [gearman_server] |
| start=true |
| |
| [gearman] |
| server=127.0.0.1 |
| |
| [connection gerrit] |
| driver=gerrit |
| server=git.example.com |
| port=29418 |
| baseurl=https://git.example.com/gerrit/ |
| user=zuul |
| sshkey=/home/zuul/.ssh/id_rsa |
| |
| See :doc:`zuul` for more details. |
| |
| The following sets up a basic timer triggered job using zuul. |
| |
| **layout.yaml**:: |
| |
| pipelines: |
| - name: periodic |
| source: gerrit |
| manager: IndependentPipelineManager |
| trigger: |
| timer: |
| - time: '0 * * * *' |
| |
| projects: |
| - name: aproject |
| periodic: |
| - aproject-periodic-build |
| |
| Starting Zuul |
| ------------- |
| |
| You can run zuul-server with the **-d** option to make it not daemonize. It's |
| a good idea at first to confirm there's no issues with your configuration. |
| |
| Simply run:: |
| |
| zuul-server |
| |
| Once run you should have 2 zuul-server processes:: |
| |
| zuul 12102 1 0 Jan21 ? 00:15:45 /home/zuul/zuulvenv/bin/python /home/zuul/zuulvenv/bin/zuul-server -d |
| zuul 12107 12102 0 Jan21 ? 00:00:01 /home/zuul/zuulvenv/bin/python /home/zuul/zuulvenv/bin/zuul-server -d |
| |
| Note: In this example zuul was installed in a virtualenv. |
| |
| The 2nd zuul-server process is gearmand running if you are using the builtin |
| gearmand server, otherwise there will only be 1 process. |
| |
| Zuul won't actually process your Job queue however unless you also have a |
| zuul-merger process running. |
| |
| Simply run:: |
| |
| zuul-merger |
| |
| Zuul should now be able to process your periodic job as configured above once |
| the Jenkins side of things is configured. |
| |
| Jenkins Setup |
| ------------- |
| |
| Install the Jenkins Gearman Plugin via Jenkins Plugin management interface. |
| Then naviage to **Manage > Configuration > Gearman** and setup the Jenkins |
| server hostname/ip and port to connect to gearman. |
| |
| At this point gearman should be running your Jenkins jobs. |
| |
| Troubleshooting |
| --------------- |
| |
| Checking Gearman function registration (jobs). You can use telnet to connect |
| to gearman to check that Jenkins is registering your configured jobs in |
| gearman:: |
| |
| telnet <gearman_ip> 4730 |
| |
| Useful commands are **workers** and **status** which you can run by just |
| typing those commands once connected to gearman. Every job in your Jenkins |
| master must appear when you run **workers** for Zuul to be able to run jobs |
| against your Jenkins instance. |