1. 创建第一个Tekton Pipeline
任务目标
本案例将使用 Tekton 定义并运行一个包含 clone、build、push 三个 Task 的简单 Pipeline,验证 Tekton 的基本流程。你将创建必要的 Tekton 资源(Task、Pipeline、PipelineRun),并通过 tkn 命令行工具触发运行,最终确认 Pipeline 的三个步骤依次成功执行。
环境准备
开始前请确认以下环境已就绪:
- 一个可用的 Kubernetes 集群(v1.21+)
- Tekton Pipelines 已安装(v0.40+),可通过
kubectl get pods -n tekton-pipelines验证 - Tekton CLI(
tkn)已安装 - 一个可访问的容器镜像仓库(本案例以 Docker Hub 为例,请替换为自己的仓库地址)
实现代码
以下 YAML 定义了一个完整的 Tekton Pipeline 资源,包含三个 Task 及对应的 PipelineRun。将全部内容保存为 pipeline.yaml:
---
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: clone
spec:
params:
- name: repo-url
type: string
steps:
- name: git-clone
image: alpine/git:latest
script: |
git clone $(params.repo-url) /workspace/source
---
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: build
spec:
params:
- name: image-name
type: string
workspaces:
- name: source
steps:
- name: docker-build
image: docker:stable
script: |
cd /workspace/source
docker build -t $(params.image-name) .
volumeMounts:
- name: docker-socket
mountPath: /var/run/docker.sock
volumes:
- name: docker-socket
hostPath:
path: /var/run/docker.sock
---
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: push
spec:
params:
- name: image-name
type: string
steps:
- name: docker-push
image: docker:stable
script: |
docker push $(params.image-name)
volumeMounts:
- name: docker-socket
mountPath: /var/run/docker.sock
volumes:
- name: docker-socket
hostPath:
path: /var/run/docker.sock
---
apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
name: simple-pipeline
spec:
params:
- name: repo-url
type: string
- name: image-name
type: string
workspaces:
- name: shared-workspace
tasks:
- name: clone
taskRef:
name: clone
params:
- name: repo-url
value: $(params.repo-url)
- name: build
taskRef:
name: build
runAfter: [clone]
params:
- name: image-name
value: $(params.image-name)
workspaces:
- name: source
workspace: shared-workspace
- name: push
taskRef:
name: push
runAfter: [build]
params:
- name: image-name
value: $(params.image-name)
---
apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
name: simple-pipeline-run
spec:
pipelineRef:
name: simple-pipeline
params:
- name: repo-url
value: "https://github.com/your-username/your-repo.git"
- name: image-name
value: "your-dockerhub-username/your-image:latest"
workspaces:
- name: shared-workspace
volumeClaimTemplate:
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
注意:上述代码中的 repo-url 和 image-name 参数值需要替换为你实际使用的 Git 仓库地址和镜像仓库地址。示例仓库中需包含 Dockerfile 才能完成 build 步骤。
运行与验证
按照以下步骤执行并验证 Pipeline:
- 应用资源定义:
kubectl apply -f pipeline.yaml
- 启动 PipelineRun(如果上一步已自动创建,可跳过):
tkn pipeline start simple-pipeline \
--param repo-url=https://github.com/your-username/your-repo.git \
--param image-name=your-dockerhub-username/your-image:latest \
--workspace name=shared-workspace,claimName=tekton-pvc \
--showlog
若使用 kubectl apply 已创建 PipelineRun,则直接观察日志:
tkn pipelinerun logs simple-pipeline-run -f
- 验证结果:
tkn pipelinerun list
通过条件:
tkn pipelinerun list中simple-pipeline-run的STATUS显示为Succeeded。- 日志中依次出现
git-clone、docker-build、docker-push三个步骤,且均以COMMAND SUCCEEDED结束。 - 登录你的镜像仓库,确认
your-image:latest已被成功推送。
常见问题
- clone 步骤失败:确认 Git 仓库地址可公开访问,或已配置对应的 Secret 用于认证。
- build 步骤无法连接 Docker 守护进程:当前实现使用 hostPath 挂载宿主机 Docker socket,仅适用于单节点测试环境。生产环境建议使用 Kaniko 或 Buildah 替代。
- push 步骤认证失败:执行
docker login登录仓库,或在集群中为 Docker 配置config.json类型的 Secret 并挂载到步骤中。