zuul/doc/source/launchers.rst

3.5 KiB

title

Launchers

Launchers

Zuul has a modular architecture for launching jobs. Currently only Jenkins is supported, but it should be fairly easy to add a module to support other systems. Zuul makes very few assumptions about the interface to a launcher -- if it can trigger jobs, cancel them, and receive success or failure reports, it should be able to be used with Zuul. Patches to this effect are welcome.

Jenkins

Zuul works with Jenkins using the Jenkins API and the notification module. It uses the Jenkins API to trigger jobs, passing in parameters indicating what should be tested. It recieves notifications on job completion via the notification API (so jobs must be conifigured to notify Zuul).

Jenkins Configuration

Zuul will need access to a Jenkins user. Create a user in Jenkins, and then visit the configuration page for the user:

https://jenkins.example.com/user/USERNAME/configure

And click Show API Token to retrieve the API token for that user. You will need this later when configuring Zuul. Make sure that this user has appropriate permission to build any jobs that you want Zuul to trigger.

Make sure the notification plugin is installed. Visit the plugin manager on your jenkins:

https://jenkins.example.com/pluginManager/

And install Jenkins Notification plugin. The homepage for the plugin is at:

https://wiki.jenkins-ci.org/display/JENKINS/Notification+Plugin

Jenkins Job Configuration

For each job that you want Zuul to trigger, you will need to add a notification endpoint for the job on that job's configuration page. Click Add Endpoint and enter the following values:

Protocol

HTTP

URL

http://127.0.0.1:8001/jenkins_endpoint

If you are running Zuul on a different server than Jenkins, enter the appropriate URL. Note that Zuul itself has no access controls, so ensure that only Jenkins is permitted to access that URL.

Zuul will pass some parameters to Jenkins for every job it launches. Check This build is parameterized, and add the following fields with the type String Parameter:

UUID

Zuul provided key to link builds with Gerrit events

GERRIT_PROJECT

Zuul provided project name

GERRIT_BRANCH

Zuul provided branch name

GERRIT_CHANGES

Zuul provided list of dependent changes to merge

You may find it useful to use the GERRIT_* variables in your job. In particular, GERRIT_CHANGES indicates the change or changes that should be tested. If Zuul has decided that more than one change should be merged and tested together, they will all be listed in GERRIT_CHANGES. The format for the description of one change is:

project:branch:refspec

And multiple changes are separated by a carat ("^"). E.g.:

testproject:master:refs/changes/20/420/1^testproject:master:refs/changes/21/421/1"

The OpenStack project uses the following script to update the repository in a workspace and merge appropriate changes:

https://github.com/openstack/openstack-ci-puppet/blob/master/modules/jenkins_slave/files/slave_scripts/gerrit-git-prep.sh

Gerrit events that do not include a change (e.g., ref-updated events which are emitted after a git ref is updated (i.e., a commit is merged to master)) require a slightly different set of parameters:

UUID

Zuul provided key to link builds with Gerrit events

GERRIT_PROJECT

Zuul provided project name

GERRIT_REFNAME

Zuul provided ref name

GERRIT_OLDREV

Zuul provided old reference for ref-updated

GERRIT_NEWREV

Zuul provided new reference for ref-updated