# Getting started with Zuul on Fedora
## Upstream documentation
The upstream documentation is available at that page: https://zuul-ci.org/docs/zuul/index.html
## Installation
This section describes the installation process of the minimal set of Zuul components to
get a working Zuul deployment. Please refer to the upstream documentation for advanced
setup.
### Zookeeper
TODO
### Install Zuul components
To install the packages run:
$ sudo dnf install zuul-scheduler zuul-executor zuul-web zuul-webui
### Install and setup postgresql
$ sudo dnf install -y posgresql python3-psycopg2
$ su - postgres
$ psql
ALTER USER postgres WITH PASSWORD 'mypassword';
$ createdb --owner=postgres zuul
$ exit
Update the local access setting:
$ sudo sed -i /var/lib/pgsql/data/pg_hba.conf 's/127.0.0.1/32 ident/127.0.0.1/32 md5/'
$ sudo systemctl restart posgreql
Validate server connection by running:
$ psql -h 127.0.0.1 -U postgres -W zuul
### Update the zuul configuration to define the sql connection
In /etc/zuul/zuul.conf add the following:
[connection sqlreporter]
driver=sql
dburi=postgresql://postgres:mypassword@127.0.0.1:5432/zuul
### Setup Ansible virtual environment for the Zuul executor
The Zuul executor is the component in charge of running Zuul Job. A Zuul job is
a set of Ansible playbook. The Zuul executor support multiple version of Ansible.
Zuul provides a tool to manage the Ansible virtual environments. To initialize them
run:
$ sudo -u zuul bash -c "cd && zuul-manage-ansible -u -r /var/lib/zuul/ansible-bin"
### Build the Zuul web UI
The Zuul web UI is a React application. The Zuul packaging provide the source code of
the application. The following process describe how to compile the source to get a
production build:
$ curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
$ sudo dnf install yarn
$ cd /usr/share/zuul-ui/
$ yarn install
$ REACT_APP_ZUUL_API='<api_url>' yarn build
Replace <api_url> by the URL where the zuul-web API is listening.
### Start the scheduler and executor
To do so run:
$ sudo -u zuul bash -c "ssh-keygen -t rsa -N '' -f /var/lib/zuul/.ssh/id_rsa"
$ sudo systemctl start zuul-scheduler
$ sudo systemctl start zuul-executor
The services logs are available into /var/log/zuul/zuul.log.
### Setup the web API
Install Apache:
$ sudo dnf install httpd
$ setsebool -P httpd_can_network_connect on
Then setup the reverve proxy by adding to /etc/httpd/conf.d/zuul.conf the
following content:
RewriteEngine on
RewriteRule ^/api/tenant/(.*)/console-stream ws://localhost:9000/api/tenant/$1/console-stream [P]
RewriteRule ^/(.*)$ http://localhost:9000/$1 [P]
Reload Apache:
$ sudo systemctl relead httpd
Finally start the zuul-web process
$ sudo systemctl start zuul-web
Validate the direct access to the API by running:
$ curl http://localhost:9000/api/tenants
Validate the access to the API via the reverse proxy:
$ curl http://<site_url>/api/tenants
## Run a first Zuul job
### Prepare a Git repository to host the CI configuration
We need to prepare a local Git repository to host the pipelines and jobs configuration.
Follow the process below:
$ git init /home/fedora/zuul-config
In /home/fedora/zuul-config/.zuul.yaml add the following content:
- pipeline:
name: periodic
post-review: true
description: Jobs in this queue are triggered every minute.
manager: independent
precedence: low
trigger:
timer:
- time: '* * * * *'
success:
sqlreporter:
failure:
sqlreporter:
- job:
name: my-noop
description: Minimal working job
parent: null
run: my-noop.yaml
- project:
periodic:
jobs:
- my-noop
Create the /home/fedora/zuul-config/my-noop.yaml and add the following content:
---
- hosts: localhost
tasks:
- name: List working directory
command: ls -al {{ ansible_user_dir }}
- name: Sleep 30 seconds
wait_for:
timeout: 30
Then commit the configuration by running:
$ cd /home/fedora/zuul-config/
$ git config user.name "John Doe"
$ git config user.email "john@localhost"
$ git add -A .
$ git commit -m"Init demo config"
### Run a simple Git deamon to serve the config repository
$ dulwich web-daemon -l 0.0.0.0 /
### Add the new connection in the Zuul configuration
In /etc/zuul/zuul.conf add the following:
[connection local_git]
driver=git
baseurl=http://localhost:8000/home/fedora
poll_delay=300
### Setup the Zuul tenant configuration file
In /etc/zuul/main.yaml add the following:
- tenant:
name: default
source:
local_git:
config-projects:
- zuul-config
### Restart the Zuul services
$ sudo systemctl restart zuul-*
## Access the web ui
Access the build page, where you should see the periodic job my-noop runs
http://<api_url>/t/default/builds