| :title: Triggers |
| |
| Triggers |
| ======== |
| |
| The process of merging a change starts with proposing a change to be |
| merged. Zuul supports Gerrit and GitHub as triggering systems. |
| Zuul's design is modular, so alternate triggering and reporting |
| systems can be supported. |
| |
| Gerrit |
| ------ |
| |
| Zuul works with standard versions of Gerrit by invoking the ``gerrit |
| stream-events`` command over an SSH connection. It also reports back |
| to Gerrit using SSH. |
| |
| If using Gerrit 2.7 or later, make sure the user is a member of a group |
| that is granted the ``Stream Events`` permission, otherwise it will not |
| be able to invoke the ``gerrit stream-events`` command over SSH. |
| |
| A connection name with the gerrit driver can take multiple events with |
| the following options. |
| |
| **event** |
| The event name from gerrit. Examples: ``patchset-created``, |
| ``comment-added``, ``ref-updated``. This field is treated as a |
| regular expression. |
| |
| **branch** |
| The branch associated with the event. Example: ``master``. This |
| field is treated as a regular expression, and multiple branches may |
| be listed. |
| |
| **ref** |
| On ref-updated events, the branch parameter is not used, instead the |
| ref is provided. Currently Gerrit has the somewhat idiosyncratic |
| behavior of specifying bare refs for branch names (e.g., ``master``), |
| but full ref names for other kinds of refs (e.g., ``refs/tags/foo``). |
| Zuul matches what you put here exactly against what Gerrit |
| provides. This field is treated as a regular expression, and |
| multiple refs may be listed. |
| |
| **ignore-deletes** |
| When a branch is deleted, a ref-updated event is emitted with a newrev |
| of all zeros specified. The ``ignore-deletes`` field is a boolean value |
| that describes whether or not these newrevs trigger ref-updated events. |
| The default is True, which will not trigger ref-updated events. |
| |
| **approval** |
| This is only used for ``comment-added`` events. It only matches if |
| the event has a matching approval associated with it. Example: |
| ``code-review: 2`` matches a ``+2`` vote on the code review category. |
| Multiple approvals may be listed. |
| |
| **email** |
| This is used for any event. It takes a regex applied on the performer |
| email, i.e. Gerrit account email address. If you want to specify |
| several email filters, you must use a YAML list. Make sure to use non |
| greedy matchers and to escapes dots! |
| Example: ``email: ^.*?@example\.org$``. |
| |
| **email_filter** (deprecated) |
| A deprecated alternate spelling of *email*. Only one of *email* or |
| *email_filter* should be used. |
| |
| **username** |
| This is used for any event. It takes a regex applied on the performer |
| username, i.e. Gerrit account name. If you want to specify several |
| username filters, you must use a YAML list. Make sure to use non greedy |
| matchers and to escapes dots! |
| Example: ``username: ^jenkins$``. |
| |
| **username_filter** (deprecated) |
| A deprecated alternate spelling of *username*. Only one of *username* or |
| *username_filter* should be used. |
| |
| **comment** |
| This is only used for ``comment-added`` events. It accepts a list of |
| regexes that are searched for in the comment string. If any of these |
| regexes matches a portion of the comment string the trigger is |
| matched. ``comment: retrigger`` will match when comments |
| containing 'retrigger' somewhere in the comment text are added to a |
| change. |
| |
| **comment_filter** (deprecated) |
| A deprecated alternate spelling of *comment*. Only one of *comment* or |
| *comment_filter* should be used. |
| |
| *require-approval* |
| This may be used for any event. It requires that a certain kind |
| of approval be present for the current patchset of the change (the |
| approval could be added by the event in question). It follows the |
| same syntax as the :ref:`"approval" pipeline requirement |
| <pipeline-require-approval>`. For each specified criteria there must |
| exist a matching approval. |
| |
| *reject-approval* |
| This takes a list of approvals in the same format as |
| *require-approval* but will fail to enter the pipeline if there is |
| a matching approval. |
| |
| GitHub |
| ------ |
| |
| Github webhook events can be configured as triggers. |
| |
| A connection name with the github driver can take multiple events with the |
| following options. |
| |
| **event** |
| The pull request event from github. A ``pull_request`` event will |
| have associated action(s) to trigger from. The supported actions are: |
| |
| *opened* - pull request opened |
| |
| *changed* - pull request synchronized |
| |
| *closed* - pull request closed |
| |
| *reopened* - pull request reopened |
| |
| *comment* - comment added on pull request |
| |
| *labeled* - label added on pull request |
| |
| *unlabeled* - label removed from pull request |
| |
| *push* - head reference updated (pushed to branch) |
| |
| **branch** |
| The branch associated with the event. Example: ``master``. This |
| field is treated as a regular expression, and multiple branches may |
| be listed. Used for ``pull-request`` events. |
| |
| **comment** |
| This is only used for ``pull_request`` ``comment`` events. It accepts a list |
| of regexes that are searched for in the comment string. If any of these |
| regexes matches a portion of the comment string the trigger is matched. |
| ``comment: retrigger`` will match when comments containing 'retrigger' |
| somewhere in the comment text are added to a pull request. |
| |
| **label** |
| This is only used for ``labeled`` and ``unlabeled`` actions. It accepts a list |
| of strings each of which matches the label name in the event literally. |
| ``label: recheck`` will match a ``labeled`` action when pull request is |
| labeled with a ``recheck`` label. ``label: 'do not test'`` will match a |
| ``unlabeled`` action when a label with name ``do not test`` is removed from |
| the pull request. |
| |
| Additionally a ``push`` event can be configured, with an ``ref`` field. This |
| field is treated as a regular expression and multiple refs may be listed. |
| Github always sends full ref name, eg. ``refs/tags/bar`` and this string is |
| matched against the regexp. |
| |
| GitHub Configuration |
| ~~~~~~~~~~~~~~~~~~~~ |
| |
| Configure GitHub `webhook events |
| <https://developer.github.com/webhooks/creating/>`_. |
| |
| Set *Payload URL* to |
| ``http://<zuul-hostname>/connection/<connection-name>/payload``. |
| |
| Set *Content Type* to ``application/json``. |
| |
| Select *Events* you are interested in. See above for the supported events. |
| |
| Timer |
| ----- |
| |
| A simple timer trigger is available as well. It supports triggering |
| jobs in a pipeline based on cron-style time instructions. |
| |
| Timers don't require a special connection or driver. Instead they can |
| be used by listing **timer** as the trigger. |
| |
| This trigger will run based on a cron-style time specification. |
| It will enqueue an event into its pipeline for every project |
| defined in the configuration. Any job associated with the |
| pipeline will run in response to that event. |
| |
| **time** |
| The time specification in cron syntax. Only the 5 part syntax is |
| supported, not the symbolic names. Example: ``0 0 * * *`` runs |
| at midnight. |
| |
| Zuul |
| ---- |
| |
| The Zuul trigger generates events based on internal actions in Zuul. |
| Multiple events may be listed. |
| |
| Zuul events don't require a special connection or driver. Instead they |
| can be used by listing **zuul** as the trigger. |
| |
| **event** |
| The event name. Currently supported: |
| |
| *project-change-merged* when Zuul merges a change to a project, |
| it generates this event for every open change in the project. |
| |
| *parent-change-enqueued* when Zuul enqueues a change into any |
| pipeline, it generates this event for every child of that |
| change. |
| |
| **pipeline** |
| Only available for ``parent-change-enqueued`` events. This is the |
| name of the pipeline in which the parent change was enqueued. |
| |
| *require-approval* |
| This may be used for any event. It requires that a certain kind |
| of approval be present for the current patchset of the change (the |
| approval could be added by the event in question). It follows the |
| same syntax as the :ref:`"approval" pipeline requirement |
| <pipeline-require-approval>`. For each specified criteria there must |
| exist a matching approval. |
| |
| *reject-approval* |
| This takes a list of approvals in the same format as |
| *require-approval* but will fail to enter the pipeline if there is |
| a matching approval. |