需要在 Kubernetes 原生环境中运行 CI/CD,任务以 Pod 执行,支持可复用 Task、Pipeline、Trigger 和 Dashboard。适合平台团队提供标准化流水线。
kubectl。kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
kubectl apply -f https://storage.googleapis.com/tekton-releases/dashboard/latest/release.yaml
kubectl -n tekton-pipelines get pods
kubectl apply -f - <<'EOF'
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: git-clone
spec:
params:
- name: url
type: string
workspaces:
- name: source
steps:
- name: clone
image: alpine/git
script: |
git clone $(params.url) $(workspaces.source.path)/src
EOF
kubectl apply -f - <<'EOF'
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: build-push
spec:
params:
- name: image
type: string
workspaces:
- name: source
steps:
- name: build
image: gcr.io/kaniko-project/executor:latest
args:
- --dockerfile=$(workspaces.source.path)/src/Dockerfile
- --context=$(workspaces.source.path)/src
- --destination=$(params.image)
EOF
kubectl apply -f - <<'EOF'
apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
name: build-app
spec:
params:
- name: repo-url
- name: image
workspaces:
- name: shared
tasks:
- name: clone
taskRef: {name: git-clone}
params: [{name: url, value: $(params.repo-url)}]
workspaces: [{name: source, workspace: shared}]
- name: build
runAfter: [clone]
taskRef: {name: build-push}
params: [{name: image, value: $(params.image)}]
workspaces: [{name: source, workspace: shared}]
EOF
kubectl apply -f - <<'EOF'
apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
generateName: build-app-
spec:
pipelineRef: {name: build-app}
params:
- {name: repo-url, value: https://github.com/example/app.git}
- {name: image, value: registry.example.com/app:latest}
workspaces:
- name: shared
volumeClaimTemplate:
spec:
accessModes: [ReadWriteOnce]
resources: {requests: {storage: 1Gi}}
EOF
Succeeded。finally 清理,失败后资源残留。tkn — Tekton CLIkubectl — 查看 Task、Pipeline、PipelineRunkaniko — 构建镜像git — 代码拉取