TriggerBindings
As per the name, TriggerBinding
s bind against events/triggers.TriggerBinding
s enable you to capture fields from an event and store them asparameters. The separation of TriggerBinding
s from TriggerTemplate
s wasdeliberate to encourage reuse between them.
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:
name: pipeline-binding
spec:
params:
- name: gitrevision
value: $(body.head_commit.id)
- name: gitrepositoryurl
value: $(body.repository.url)
- name: contenttype
value: $(header.Content-Type)
TriggerBinding
s are connected to TriggerTemplate
s within anEventListener
, which is where the pod is actuallyinstantiated that “listens” for the respective events.
Parameters
TriggerBinding
s can provide params
which are passed to a TriggerTemplate
.Each parameter has a name
and a value
.
Event Variable Interpolation
TriggerBindings can access values from the HTTP JSON body and the headers usingJSONPath expressions wrapped in $()
. The key in the header iscase-insensitive.
These are all valid expressions:
$(body.key1)
$(.body.key)
These are invalid expressions:
.body.key1 # INVALID - Not wrapped in $()
$({body) # INVALID - Ending curly brace absent
If the $()
is embedded inside another $()
we will use the contents of theinnermost $()
as the JSONPath expression
$($(body.b)) -> $(body.b)
$($($(body.b))) -> $(body.b)
Examples
`$(body)` is replaced by the entire body.
$(body) -> "{"key1": "value1", "key2": {"key3": "value3"}, "key4": ["value4", "value5", "value6"]}"
$(body.key1) -> "value1"
$(body.key2) -> "{"key3": "value3"}"
$(body.key2.key3) -> "value3"
$(body.key4[0]) -> "value4"
$(body.key4[0:2]) -> "{"value4", "value5"}"
# $(header) is replaced by all of the headers from the event.
$(header) -> "{"One":["one"], "Two":["one","two","three"]}"
$(header.One) -> "one"
$(header.one) -> "one"
$(header.Two) -> "one two three"
$(header.Two[1]) -> "two"
Multiple Bindings
In an EventListener
, you may specify multiple bindings aspart of your trigger. This allows you to create reusable bindings that can bemixed and matched with various triggers. For example, a trigger with one bindingthat extracts event information, and another binding that provides deployenvironment information:
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:
name: event-binding
spec:
params:
- name: gitrevision
value: $(body.head_commit.id)
- name: gitrepositoryurl
value: $(body.repository.url)
---
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:
name: prod-env
spec:
params:
- name: environment
value: prod
---
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:
name: staging-env
spec:
params:
- name: environment
value: staging
---
apiVersion: triggers.tekton.dev/v1alpha1
kind: EventListener
metadata:
name: listener
spec:
triggers:
- name: prod-trigger
bindings:
- name: event-binding
- name: prod-env
template:
name: pipeline-template
- name: staging-trigger
bindings:
- name: event-binding
- name: staging-env
template:
name: pipeline-template