Events in Tekton
Tekton’s controllers emits Kubernetes events
when TaskRuns and PipelineRuns execute. This allows you to monitor and react to what’s happening during execution by
retrieving those events using the kubectl describe command. Tekton can also emit CloudEvents.
Note: Conditions do not emit events
but the underlying TaskRun do.
Events in TaskRuns
TaskRuns emit events for the following Reasons:
Started: emitted the first time theTaskRunis picked by the reconciler from its work queue, so it only happens if webhook validation was successful. This event in itself does not indicate that aStepis executing; theStepexecutes once the following conditions are satisfied:- Validation of the
Taskand its associated resources must succeed, and - Checks for associated
Conditionsmust succeed, and - Scheduling of the associated
Podmust succeed.
- Validation of the
Succeeded: emitted once all steps in theTaskRunhave executed successfully, including post-steps injected by Tekton.Failed: emitted if theTaskRunfinishes running unsuccessfully because aStepfailed, or theTaskRuntimed out or was cancelled. ATaskRunalso emitsFailedevents if it cannot execute at all due to failing validation.
Events in PipelineRuns
PipelineRuns emit events for the following Reasons:
Started: emitted the first time thePipelineRunis picked by the reconciler from its work queue, so it only happens if webhook validation was successful. This event in itself does not indicate that aStepis executing; theStepexecutes once validation for thePipelineas well as all associatedTasksandResourcesis successful.Running: emitted when thePipelineRunpasses validation and actually begins execution.Succeeded: emitted once allTasksreachable via the DAG have executed successfully.Failed: emitted if thePipelineRunfinishes running unsuccessfully because aTaskfailed or thePipelineRuntimed out or was cancelled. APipelineRunalso emitsFailedevents if it cannot execute at all due to failing validation.
Events via CloudEvents
When you configure a sink, Tekton emits events as described in the table below.
Tekton sends cloud events in a parallel routine to allow for retries without blocking the
reconciler. A routine is started every time the Succeeded condition changes - either state,
reason or message. Retries are sent using an exponential back-off strategy.
Because of retries, events are not guaranteed to be sent to the target sink in the order they happened.
| Resource | Event | Event Type |
|---|---|---|
TaskRun |
Started |
dev.tekton.event.taskrun.started.v1 |
TaskRun |
Running |
dev.tekton.event.taskrun.running.v1 |
TaskRun |
Condition Change while Running |
dev.tekton.event.taskrun.unknown.v1 |
TaskRun |
Succeed |
dev.tekton.event.taskrun.successful.v1 |
TaskRun |
Failed |
dev.tekton.event.taskrun.failed.v1 |
PipelineRun |
Started |
dev.tekton.event.pipelinerun.started.v1 |
PipelineRun |
Running |
dev.tekton.event.pipelinerun.running.v1 |
PipelineRun |
Condition Change while Running |
dev.tekton.event.pipelinerun.unknown.v1 |
PipelineRun |
Succeed |
dev.tekton.event.pipelinerun.successful.v1 |
PipelineRun |
Failed |
dev.tekton.event.pipelinerun.failed.v1 |
Run |
Started |
dev.tekton.event.run.started.v1 |
Run |
Running |
dev.tekton.event.run.running.v1 |
Run |
Succeed |
dev.tekton.event.run.successful.v1 |
Run |
Failed |
dev.tekton.event.run.failed.v1 |
CloudEvents for Runs are only sent when enabled in the configuration.
Note: CloudEvents for Runs rely on an ephemeral cache to avoid duplicate
events. In case of controller restart, the cache is reset and duplicate events
may be sent.
Format of CloudEvents
According to the CloudEvents spec, HTTP headers are included to match the context fields. For example:
"Ce-Id": "77f78ae7-ff6d-4e39-9d05-b9a0b7850527",
"Ce-Source": "/apis/tekton.dev/v1beta1/namespaces/default/taskruns/curl-run-6gplk",
"Ce-Specversion": "1.0",
"Ce-Subject": "curl-run-6gplk",
"Ce-Time": "2021-01-29T14:47:58.157819Z",
"Ce-Type": "dev.tekton.event.taskrun.unknown.v1",
Other HTTP headers are:
"Accept-Encoding": "gzip",
"Connection": "close",
"Content-Length": "3519",
"Content-Type": "application/json",
"User-Agent": "Go-http-client/1.1"
The payload is JSON, a map with a single root key taskRun or pipelineRun, depending on the source
of the event. Inside the root key, the whole spec and status of the resource is included. For example:
{
"taskRun": {
"metadata": {
"annotations": {
"pipeline.tekton.dev/release": "v0.20.1",
"tekton.dev/pipelines.minVersion": "0.12.1",
"tekton.dev/tags": "search"
},
"creationTimestamp": "2021-01-29T14:47:57Z",
"generateName": "curl-run-",
"generation": 1,
"labels": {
"app.kubernetes.io/managed-by": "tekton-pipelines",
"app.kubernetes.io/version": "0.1",
"tekton.dev/task": "curl"
},
"managedFields": "(...)",
"name": "curl-run-6gplk",
"namespace": "default",
"resourceVersion": "156770",
"selfLink": "/apis/tekton.dev/v1beta1/namespaces/default/taskruns/curl-run-6gplk",
"uid": "4ccb4f01-3ecc-4eb4-87e1-76f04efeee5c"
},
"spec": {
"params": [
{
"name": "url",
"value": "https://artifacthub.io/packages/tekton-task/tekton-catalog-tasks/git-clone"
}
],
"resources": {},
"serviceAccountName": "default",
"taskRef": {
"kind": "Task",
"name": "curl"
},
"timeout": "1h0m0s"
},
"status": {
"conditions": [
{
"lastTransitionTime": "2021-01-29T14:47:58Z",
"message": "pod status \"Initialized\":\"False\"; message: \"containers with incomplete status: [place-tools]\"",
"reason": "Pending",
"status": "Unknown",
"type": "Succeeded"
}
],
"podName": "curl-run-6gplk-pod",
"startTime": "2021-01-29T14:47:57Z",
"steps": [
{
"container": "step-curl",
"name": "curl",
"waiting": {
"reason": "PodInitializing"
}
}
],
"taskSpec": {
"description": "This task performs curl operation to transfer data from internet.",
"params": [
{
"description": "URL to curl'ed",
"name": "url",
"type": "string"
},
{
"default": [],
"description": "options of url",
"name": "options",
"type": "array"
},
{
"default": "docker.io/curlimages/curl:7.72.0@sha256:3c3ff0c379abb1150bb586c7d55848ed4dcde4a6486b6f37d6815aed569332fe",
"description": "option of curl image",
"name": "curl-image",
"type": "string"
}
],
"steps": [
{
"args": [
"$(params.options[*])",
"$(params.url)"
],
"command": [
"curl"
],
"image": "$(params.curl-image)",
"name": "curl",
"resources": {}
}
]
}
}
}
}
Feedback
Was this page helpful?