What Is Tekton?
Tekton provides Kubernetes-native CI/CD β pipelines defined as CRDs, running as pods, with no external CI server. Part of the CD Foundation (Linux Foundation).
Why Tekton over Jenkins/GitHub Actions?
| Feature | Tekton | Jenkins | GitHub Actions |
|---|---|---|---|
| Runs on | Kubernetes (native) | JVM (standalone) | GitHub cloud |
| Defined as | K8s CRDs | Groovy/XML | YAML |
| Scalability | Pod-per-task (infinite) | Executor agents | Runner limits |
| Self-hosted | β | β | β οΈ (runners) |
| GitOps native | β (resources in Git) | β | β |
| Vendor lock-in | None (CDF standard) | None | GitHub |
Core Concepts
Pipeline
βββ Task 1 (clone)
β βββ Step 1: git clone
βββ Task 2 (build)
β βββ Step 1: compile
β βββ Step 2: test
βββ Task 3 (image)
β βββ Step 1: docker build
β βββ Step 2: docker push
βββ Task 4 (deploy)
βββ Step 1: kubectl applyInstallation
kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
kubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml
kubectl apply -f https://storage.googleapis.com/tekton-releases/dashboard/latest/release.yamlTask Definition
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: build-and-push
spec:
params:
- name: image
type: string
- name: dockerfile
type: string
default: ./Dockerfile
workspaces:
- name: source
steps:
- name: build
image: gcr.io/kaniko-project/executor:latest
args:
- --dockerfile=$(params.dockerfile)
- --destination=$(params.image)
- --context=$(workspaces.source.path)
- --cache=truePipeline
apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
name: build-deploy
spec:
params:
- name: repo-url
- name: image
- name: namespace
workspaces:
- name: shared-workspace
tasks:
- name: clone
taskRef:
name: git-clone # From Tekton Hub
params:
- name: url
value: $(params.repo-url)
workspaces:
- name: output
workspace: shared-workspace
- name: build
taskRef:
name: build-and-push
runAfter: [clone]
params:
- name: image
value: $(params.image)
workspaces:
- name: source
workspace: shared-workspace
- name: deploy
taskRef:
name: kubernetes-actions
runAfter: [build]
params:
- name: script
value: |
kubectl set image deployment/app app=$(params.image) -n $(params.namespace)Triggers (Webhook β Pipeline)
apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:
name: github-listener
spec:
triggers:
- name: github-push
bindings:
- ref: github-push-binding
template:
ref: build-deploy-template
---
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerBinding
metadata:
name: github-push-binding
spec:
params:
- name: repo-url
value: $(body.repository.clone_url)
- name: revision
value: $(body.head_commit.id)Tekton + Argo CD (Full GitOps)
GitHub Push β Tekton (build + test + push image) β Update Git manifest β Argo CD syncsTekton handles CI (build artifacts), Argo CD handles CD (deploy to cluster). Clean separation.