1.
Task
Tekton Pipeline 的主要目标是单独运行您的任务或作为管道的一部分运行。每个任务都在 Kubernetes 集群上作为 Pod
运行,每个步骤都作为自己的容器。这点深得 drone
思想精髓,其实 drone 也有计划将 kubernetes 作为任务执行引擎。
Task
定义了需要执行的工作,例如以下是一个简单的任务:
steps
是一系列由任务顺序执行的命令。这个 steps 内的配置几乎与 drone
如出一辙。
Task
定义好了之后并不会被执行,创建 TaskRun
时才会执行。这是合理的,相当于是一个触发。
$ kubectl apply -f < name-of-file.yaml >
查看 TaskRun
:
状态 Succeeded = True
显示任务已成功运行。
2.
任务输入和输出
在更常见的场景中,任务需要多个步骤来处理输入和输出资源。例如,Task 可以从 GitHub 存储库获取源代码并从中构建 Docker 镜像。
PipelinesResources
用于定义任务的输入(如代码)与输出(如 Docker 镜像)。有一些系统定义的资源类型可供使用,以下是通常需要的两个资源示例。
该 git
资源可以是你要编译的代码:
该 image
资源代表要被任务编译成的镜像:
以下是 Task
输入和输出。输入资源是 GitHub 存储库,输出是从该源生成的图像。任务命令的参数支持模板化,因此任务的定义是常量,参数的值可以在运行时更改。
TaskRun 将输入和输出绑定到已定义的 PipelineResources
值,除了执行任务步骤外,还将值设置为用于模板化的参数。
inputs
和outputs
应当不限制死必须叫这两个名字,只要是能支持参数就好。比如定义一个叫build
的资源去指定 docker build 的镜像:
Task 里:
我是觉得需要能进行这样的扩展了, 仅是 inputs 和 outputs 就狭义了。
获取 pipeline
全部信息:
$ kubectl get build-pipeline
NAME AGE
taskruns/build-docker-image-from-git-source-task-run 30s
NAME AGE
pipelineresources/skaffold-git 6m
pipelineresources/skaffold-image-leeroy-web 7m
NAME AGE
tasks/build-docker-image-from-git-source 7m
要查看 TaskRun
的输出,请使用以下命令:
类型的状态 Succeeded = True
显示 Task 已成功运行,你还可以验证 Docker 镜像是否生成。
3.
Pipeline
Pipeline
定义要按顺序执行的任务列表,同时还通过使用该 from
字段指示是否应将任何输出用作后续任务的输入,并指示执行的顺序(使用 runAfter
和 from
字段)。你在任务中使用的相同模板也可以在管道中使用。
以上 Pipeline 是引用一个 Task deploy-using-kubectl
:
要运行 Pipeline,请创建 PipelineRun
如下:
执行与查看 pipeline:
$ kubectl apply -f < name-of-file.yaml >
$ kubectl get pipelineruns tutorial-pipeline-run-1 -o yaml
总结
初学者会觉得有点绕,但是这种设计也是为了解耦合,我个人觉得优劣如下:
优势:
劣势:
drone
一个 pipeline 中的容器是共享了一个数据卷的,这样上个任务产生的文件很方便的给下个任务用,而基于集群的任务就可能得依赖 git docker 镜像仓库等做输入输出,有点麻烦,好的解决办法是利用 k8s 分布试存储给 pipeline 设置一个共享卷,方便任务间传输数据。总体来说路子是对的,而且还是有很多场景可以用的。