搭建 Tekton CI/CD 流水线

适用场景

需要在 Kubernetes 原生环境中运行 CI/CD,任务以 Pod 执行,支持可复用 Task、Pipeline、Trigger 和 Dashboard。适合平台团队提供标准化流水线。

前置条件

步骤

  1. 安装 Tekton Pipelines 和 Dashboard:
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
  1. 创建 git clone Task:
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
  1. 创建构建镜像 Task(示例用 Kaniko):
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
  1. 创建 Pipeline:
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
  1. 运行 Pipeline:
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

验证

回滚

常见坑

相关命令