blob: 263f28077728ee5057872f62eb6bdc8b095c591c [file] [log] [blame]
James E. Blaircdd00072012-06-08 19:17:28 -07001:title: Triggers
2
3Triggers
4========
5
6The process of merging a change starts with proposing a change to be
James E. Blairc494d542014-08-06 09:23:52 -07007merged. Primarily, Zuul supports Gerrit as a triggering system.
James E. Blaircdd00072012-06-08 19:17:28 -07008Zuul's design is modular, so alternate triggering and reporting
James E. Blair63bb0ef2013-07-29 17:14:51 -07009systems can be supported.
James E. Blaircdd00072012-06-08 19:17:28 -070010
11Gerrit
12------
13
14Zuul works with standard versions of Gerrit by invoking the ``gerrit
15stream-events`` command over an SSH connection. It also reports back
16to Gerrit using SSH.
17
David Pursehouse78556f72014-11-04 18:44:36 +090018If using Gerrit 2.7 or later, make sure the user is a member of a group
19that is granted the ``Stream Events`` permission, otherwise it will not
20be able to invoke the ``gerrit stream-events`` command over SSH.
21
Joshua Heskethfe485c62015-08-11 23:42:34 +100022A connection name with the gerrit driver can take multiple events with
23the following options.
24
25 **event**
26 The event name from gerrit. Examples: ``patchset-created``,
27 ``comment-added``, ``ref-updated``. This field is treated as a
28 regular expression.
29
30 **branch**
31 The branch associated with the event. Example: ``master``. This
32 field is treated as a regular expression, and multiple branches may
33 be listed.
34
35 **ref**
36 On ref-updated events, the branch parameter is not used, instead the
37 ref is provided. Currently Gerrit has the somewhat idiosyncratic
38 behavior of specifying bare refs for branch names (e.g., ``master``),
39 but full ref names for other kinds of refs (e.g., ``refs/tags/foo``).
40 Zuul matches what you put here exactly against what Gerrit
41 provides. This field is treated as a regular expression, and
42 multiple refs may be listed.
43
44 **ignore-deletes**
45 When a branch is deleted, a ref-updated event is emitted with a newrev
46 of all zeros specified. The ``ignore-deletes`` field is a boolean value
47 that describes whether or not these newrevs trigger ref-updated events.
48 The default is True, which will not trigger ref-updated events.
49
50 **approval**
51 This is only used for ``comment-added`` events. It only matches if
52 the event has a matching approval associated with it. Example:
53 ``code-review: 2`` matches a ``+2`` vote on the code review category.
54 Multiple approvals may be listed.
55
56 **email**
57 This is used for any event. It takes a regex applied on the performer
58 email, i.e. Gerrit account email address. If you want to specify
59 several email filters, you must use a YAML list. Make sure to use non
60 greedy matchers and to escapes dots!
61 Example: ``email: ^.*?@example\.org$``.
62
63 **email_filter** (deprecated)
64 A deprecated alternate spelling of *email*. Only one of *email* or
65 *email_filter* should be used.
66
67 **username**
68 This is used for any event. It takes a regex applied on the performer
69 username, i.e. Gerrit account name. If you want to specify several
70 username filters, you must use a YAML list. Make sure to use non greedy
71 matchers and to escapes dots!
72 Example: ``username: ^jenkins$``.
73
74 **username_filter** (deprecated)
75 A deprecated alternate spelling of *username*. Only one of *username* or
76 *username_filter* should be used.
77
78 **comment**
79 This is only used for ``comment-added`` events. It accepts a list of
80 regexes that are searched for in the comment string. If any of these
81 regexes matches a portion of the comment string the trigger is
82 matched. ``comment: retrigger`` will match when comments
83 containing 'retrigger' somewhere in the comment text are added to a
84 change.
85
86 **comment_filter** (deprecated)
87 A deprecated alternate spelling of *comment*. Only one of *comment* or
88 *comment_filter* should be used.
89
90 *require-approval*
91 This may be used for any event. It requires that a certain kind
92 of approval be present for the current patchset of the change (the
93 approval could be added by the event in question). It follows the
94 same syntax as the :ref:`"approval" pipeline requirement
95 <pipeline-require-approval>`. For each specified criteria there must
96 exist a matching approval.
97
98 *reject-approval*
99 This takes a list of approvals in the same format as
100 *require-approval* but will fail to enter the pipeline if there is
101 a matching approval.
102
103
James E. Blair63bb0ef2013-07-29 17:14:51 -0700104Timer
105-----
106
107A simple timer trigger is available as well. It supports triggering
108jobs in a pipeline based on cron-style time instructions.
James E. Blairc494d542014-08-06 09:23:52 -0700109
Joshua Heskethfe485c62015-08-11 23:42:34 +1000110Timers don't require a special connection or driver. Instead they can
111be used by listing **timer** as the trigger.
112
113This trigger will run based on a cron-style time specification.
114It will enqueue an event into its pipeline for every project
115defined in the configuration. Any job associated with the
116pipeline will run in response to that event.
117
118 **time**
119 The time specification in cron syntax. Only the 5 part syntax is
120 supported, not the symbolic names. Example: ``0 0 * * *`` runs
121 at midnight.
122
James E. Blairc494d542014-08-06 09:23:52 -0700123Zuul
124----
125
126The Zuul trigger generates events based on internal actions in Zuul.
Joshua Heskethfe485c62015-08-11 23:42:34 +1000127Multiple events may be listed.
128
129Zuul events don't require a special connection or driver. Instead they
130can be used by listing **zuul** as the trigger.
131
132 **event**
133 The event name. Currently supported:
134
135 *project-change-merged* when Zuul merges a change to a project,
136 it generates this event for every open change in the project.
137
138 *parent-change-enqueued* when Zuul enqueues a change into any
139 pipeline, it generates this event for every child of that
140 change.
141
142 **pipeline**
143 Only available for ``parent-change-enqueued`` events. This is the
144 name of the pipeline in which the parent change was enqueued.
145
146 *require-approval*
147 This may be used for any event. It requires that a certain kind
148 of approval be present for the current patchset of the change (the
149 approval could be added by the event in question). It follows the
150 same syntax as the :ref:`"approval" pipeline requirement
151 <pipeline-require-approval>`. For each specified criteria there must
152 exist a matching approval.
153
154 *reject-approval*
155 This takes a list of approvals in the same format as
156 *require-approval* but will fail to enter the pipeline if there is
157 a matching approval.