On this page
- Component comparison
- How Pipelines-as-Code compares to other components
- Tekton Pipelines
- Tekton Triggers
- Authoring and CLI (tkn pac and tkn)
- Catalog and remote resolvers
- Tekton Dashboard and OpenShift Console
- Tekton Chains
- Tekton Results
- Tekton Operator
- Observability, CloudEvents, and AI failure analysis
Tekton Ecosystem
Tekton splits CI/CD responsibilities across independent Kubernetes controllers for running containers, signing artifacts, archiving logs, and displaying runs in a web UI. Pipelines-as-Code connects those controllers to your Git provider by reading .tekton/ definitions from your repository, matching webhook events, creating PipelineRun resources, and reporting results back to pull requests and commits.
Component comparison
| Component | Primary Role | How Pipelines-as-Code Relates |
|---|---|---|
| Pipelines-as-Code | Git webhook controller and resolver | Reads .tekton/ files from Git, matches events, resolves remote tasks, enforces authorization and concurrency, creates PipelineRun objects, and reports status to your Git provider. |
| Tekton Pipelines | Kubernetes execution engine | Executes the PipelineRun and TaskRun resources that Pipelines-as-Code generates and submits to the cluster. |
| Tekton Triggers | Webhook receiver and template engine | Replaced for Git repositories. Pipelines-as-Code reads .tekton/ files from Git without requiring EventListener, TriggerBinding, or TriggerTemplate resources. |
CLI (tkn & tkn pac) |
Command-line tooling | The tkn pac plugin adds repository bootstrapping, .tekton/ scaffolding, local YAML resolution, and CEL expression testing to tkn. |
| Catalog & Remotes (Artifact Hub, Tekton Catalog, Tekton Hub) | Reusable Task and Pipeline definitions |
Fetches remote tasks and pipelines from Artifact Hub, Tekton Hub, Git repositories, and HTTP URLs, then inlines them into the PipelineRun before submission. |
| UIs & Consoles (Tekton Dashboard, OpenShift Console) | Web interface for runs and logs | Formats links to Tekton Dashboard or the OpenShift Console and posts them in pull request checks and status comments. |
| Tekton Chains | Artifact signing and provenance | Watches PipelineRun and TaskRun objects created by Pipelines-as-Code, signs artifacts with Sigstore, and writes in-toto provenance attestations. |
| Tekton Results | Run and log archival | Archives completed run records into a database (and container logs when log storage is configured) so Pipelines-as-Code can prune old PipelineRun objects from Kubernetes (max-keep-runs). |
| Tekton Operator | Cluster installation and upgrades | Installs and upgrades Pipelines-as-Code alongside Tekton Pipelines, Chains, Results, and Dashboard. |
| Observability & AI (OpenTelemetry, Prometheus, CloudEvents) | Metrics, events, and log analysis | Exports Prometheus and OpenTelemetry metrics and traces (while Tekton Pipelines emits lifecycle CloudEvents), and queries a configured LLM to post failure summaries on pull requests. |
How Pipelines-as-Code compares to other components
Tekton Pipelines
Tekton Pipelines defines the Task, Pipeline, TaskRun, and PipelineRun custom resources and runs container steps in Kubernetes pods. On its own, Tekton Pipelines does not interact with Git repositories, pull requests, webhook signatures, or commit statuses.
Pipelines-as-Code handles the Git side of the workflow. When a webhook arrives from GitHub, GitLab, Forgejo, Gitea, or Bitbucket, Pipelines-as-Code reads the .tekton/ directory at the event commit revision, evaluates CEL and path filters, queues the run according to concurrency limits, and submits a self-contained PipelineRun for Tekton Pipelines to schedule.
Tekton Triggers
Tekton Triggers receives arbitrary HTTP webhooks using cluster-side EventListener, TriggerBinding, TriggerTemplate, and Interceptor resources. Using Tekton Triggers for repository CI requires maintaining cluster-side YAML templates, payload bindings, and ingress routes for each repository and event type.
Pipelines-as-Code replaces Tekton Triggers for Git workflows. Pipeline definitions stay in .tekton/*.yaml inside the application repository instead of cluster-side TriggerTemplate objects. Pipelines-as-Code validates webhook payloads, manages short-lived GitHub App tokens, posts check runs and merge request notes, gates untrusted pull requests with OWNERS files, and handles /test, /retest, /ok-to-test, and /cancel comments.
You do not need Tekton Triggers to run Pipelines-as-Code. Use Tekton Triggers when you need to trigger pipelines from non-Git HTTP sources that cannot use Pipelines-as-Code incoming webhooks.
Authoring and CLI (tkn pac and tkn)
The Tekton CLI (tkn) inspects and manages cluster resources such as TaskRun and PipelineRun. The Pipelines-as-Code CLI (tkn pac) runs as a tkn plugin or standalone binary for working with .tekton/ files:
tkn pac bootstrapinstalls Pipelines-as-Code and configures a GitHub App.tkn pac create repoandtkn pac generatecreateRepositorycustom resources and starter.tekton/pipelines.tkn pac resolveexpands a.tekton/template and its remote tasks into a singlePipelineRunYAML so you can apply it to a cluster before committing.tkn pac celevaluates CEL filter expressions against sample webhook payloads, while the OpenAPI schema provides autocompletion in your editor.
Catalog and remote resolvers
You do not need to pre-install shared Task objects in the target namespace. Before creating a PipelineRun, the Pipelines-as-Code remote resolver reads annotations such as pipelinesascode.tekton.dev/task and pipelinesascode.tekton.dev/pipeline, fetches the referenced definitions from Artifact Hub, Tekton Hub, remote Git repositories, or HTTP URLs, and inlines them into the PipelineRun.
If a pipeline uses Tekton’s cluster-side taskRef.resolver syntax, Pipelines-as-Code leaves that reference intact so Tekton Pipelines resolves it at runtime.
Tekton Dashboard and OpenShift Console
Developers see build status first in their Git provider through pull request checks, commit statuses, and comments. When a step fails and a developer needs full container logs, the watcher formats links to Tekton Dashboard or the OpenShift Console (pointing to the failing task step when available) and includes those URLs in GitHub Check Runs, GitLab pipeline statuses, and pull request comments.
Tekton Chains
Tekton Chains signs artifacts and generates provenance for Tekton workloads without requiring extra configuration in Pipelines-as-Code. After Pipelines-as-Code creates a PipelineRun from a verified Git event and Tekton Pipelines finishes running the build, Tekton Chains observes the completed PipelineRun and TaskRun objects, signs the recorded artifacts with Sigstore (Cosign, Fulcio, and Rekor), and publishes SLSA provenance in in-toto format.
Tekton Results
Keeping thousands of completed PipelineRun resources in Kubernetes increases etcd memory use, so Pipelines-as-Code can prune old runs via max-keep-runs. Tekton Results watches PipelineRun and TaskRun objects as they complete and copies their run records into an external relational database. Because a default Tekton Results installation stores resource metadata only (LOGS_API=false), enable and verify persistent log archival in Tekton Results before relying on max-keep-runs if you need to keep pod logs after runs are deleted from the cluster.
Tekton Operator
Tekton Operator installs and upgrades the Tekton stack on Kubernetes and OpenShift. Enabling Pipelines-as-Code in the TektonConfig custom resource tells the operator to deploy and reconcile the Pipelines-as-Code controller, watcher, webhook, ConfigMap settings, and OpenShift routes or Kubernetes ingresses.
Observability, CloudEvents, and AI failure analysis
Pipelines-as-Code and Tekton Pipelines both export Prometheus and OpenTelemetry metrics and distributed traces for webhook latency, Git API calls, and PipelineRun duration. Tekton Pipelines can also emit lifecycle CloudEvents when TaskRun and PipelineRun resources change state, while Pipelines-as-Code records Kubernetes Events on the target Repository namespace. When a PipelineRun fails, Pipelines-as-Code can send failed task logs and event context to a configured LLM and post a summary of the failure as a pull request comment.