Tekton基本使用
概览
Tekton 是用于构建 CI/CD 的云原生解决方案,主要在 Kubernetes 集群上的安装和运行。开发者可以通过Tekton来定义自己的CI流程,从而实现从项目构建到项目发布的全流程。
Tekton定义了一组 CR(Kubernetes 自定义资源),用户通过这些CR来定义自己的CI流程,Tekton的管理组件通过解析用户定义的CR来执行整个CI流程。
概念介绍
Tekton常用的基本概念如下,他们的关系如图所示:
- Step:步骤。步骤是整个CI/CD流程的最小单元,比如拉取代码、编译程序都可以是独立的一个步骤;
- Task:任务。任务是按顺序排列的Step的集合,每个Task在一个Pod中执行;
- TaskRun:TaskRun是Task的特定执行。可以通过TaskRun资源执行指定Task并查看执行情况;
- Pipeline:管道。管道按顺序排列的Task的集合,可以在Pipeline中定义Task的执行顺序和执行条件;
- PipelineRun:PipelineRun是Pipeline的特定执行。可以通过PipelineRun资源执行指定Pipeline并查看执行情况。
其中,Task,TaskRun, Pipeline和PipelineRun为自定义资源。 PipelineResources资源在v0.30.0版本已启用,此处不做介绍。
Tekton使用示例
当前在Gitlab上有一个名为tekton项目,项目内容为tekton-master.zip
这个项目的CI/CD流程如下:
从Gitlab拉取代码 >> 构建Docker镜像 >> 推送Docker镜像到Harbor镜像仓库
从Gitlab拉取代码 >> 构建Docker镜像 >> 推送Docker镜像到Harbor镜像仓库
以下将介绍如何使用Tekton实现上述CI/CD流程。
准备资源文件
以上zip包中包含以下文件:
- git-clone-task.yaml:用于拉取Gitlab代码的Task资源文件,为通用模板文件,将Gitlab仓库地址、分支等参数暴露出来;
- kaniko-task.yaml:用于构建并推送Docker镜像的Task资源文件,为通用模板文件,将Docker镜像名称、Tag等参数暴露出来;
- pipeline.yaml:CI/CD的流程文件,组合了拉取代码和构建镜像的Task,指定传入Task的参数,并将传入参数暴露出来,从而可以在执行pipeline时指定;
- pipelinerun.yaml:pipeline的执行资源文件,用于执行pipeline使用,并指定pipeline的执行参数,比如Gitlab仓库地址和分支、Docker镜像名称和Tag等;
- harbor-auth.yaml:用于推送Docker镜像到Harbor镜像仓库的身份认证;
- pipeline在执行CI/CD流程的时候,Gitlab仓库地址和分支、Docker镜像名称和Tag等参数可以在pipelinerun的资源文件中进行指定;
- pipeline.yaml中的runAfter字段可以定义task在某些其他task完成之后再开始执行;
常用的通用Task文件可参考:tektoncd/catalog/task/
部署资源文件
执行以下指令,部署基础资源文件:
shkubectl -ntekton-pipelines apply -f git-clone-task.yaml kubectl -ntekton-pipelines apply -f kaniko-task.yaml kubectl -ntekton-pipelines apply -f harbor-auth.yaml kubectl -ntekton-pipelines apply -f pipeline.yaml
kubectl -ntekton-pipelines apply -f git-clone-task.yaml kubectl -ntekton-pipelines apply -f kaniko-task.yaml kubectl -ntekton-pipelines apply -f harbor-auth.yaml kubectl -ntekton-pipelines apply -f pipeline.yaml
执行以下指令,触发该CI流程:
shkubectl -ntekton-pipelines apply -f pipelinerun.yaml
kubectl -ntekton-pipelines apply -f pipelinerun.yaml
查看相关资源
执行以下指令,查看流水线相关资源:
sh
kubectl -ntekton-pipelines get task,pipeline,pipelinerun,secret,taskrun
NAME AGE
task.tekton.dev/git-clone 2m12s
task.tekton.dev/kaniko 2m12s
NAME AGE
pipeline.tekton.dev/test-pipeline 2m12s
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
pipelinerun.tekton.dev/test-pipeline-run True Succeeded 109s 15s
NAME TYPE DATA AGE
……
secret/harbor-auth kubernetes.io/dockerconfigjson 1 2m12s
……
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
taskrun.tekton.dev/test-pipeline-run-build-image True Succeeded 109s 15s
taskrun.tekton.dev/test-pipeline-run-fetch-from-git True Succeeded 109s 101s
kubectl -ntekton-pipelines get task,pipeline,pipelinerun,secret,taskrun
NAME AGE
task.tekton.dev/git-clone 2m12s
task.tekton.dev/kaniko 2m12s
NAME AGE
pipeline.tekton.dev/test-pipeline 2m12s
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
pipelinerun.tekton.dev/test-pipeline-run True Succeeded 109s 15s
NAME TYPE DATA AGE
……
secret/harbor-auth kubernetes.io/dockerconfigjson 1 2m12s
……
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
taskrun.tekton.dev/test-pipeline-run-build-image True Succeeded 109s 15s
taskrun.tekton.dev/test-pipeline-run-fetch-from-git True Succeeded 109s 101s
如果你部署了Tekton-Dashboard, 也可以在Tekton-Dashboard的web页面上查看流水线及相关资源。