前面我们创建的两个任务 test 和 build-and-push 都已经完成了,我们还可以创建一个流水线来将这两个任务组织起来,形成一个流水线,这里就是我们要使用的 Pipeline 这个 CRD 对象。
创建流水线
比如我们这里的流水线流程为先运行 test 任务,如果通过了再执行后面的 build-and-push 这个任务,那么我们可以创建一个名为 test-pipeline.yaml 的资源对象,内容如下所示:
#test-pipeline.yamlapiVersion:tekton.dev/v1beta1kind:Pipelinemetadata:name:test-pipelinespec:resources:#为Tasks提供输入和输出资源声明-name:demo-gittype:git-name:harbor-imagetype:imagetasks:#添加task到流水线中#运行应用测试-name:testtaskRef:name:testresources:inputs:-name:repo#Task输入名称resource:demo-git#Pipeline资源名称#构建并推送Docker镜像-name:build-and-pushtaskRef:name:build-and-pushrunAfter:-test#测试任务执行之后resources:inputs:-name:repo#指定输入的git仓库资源resource:demo-gitoutputs:#指定输出的镜像资源-name:builtImageresource:harbor-image
首先我们需要定义流水线需要哪些资源,可以是输入或者输出的资源,在这里我们只有一个输入,那就是命名为 repo 的应用程序源码的 GitHub 仓库。接下来定义任务,每个任务都通过 taskRef 进行引用,并传递任务需要的输入参数。
同样直接创建这个资源对象即可:
$kubectlapply-ftest-pipeline.yamlpipeline.tekton.dev/test-pipelinecreated
前面我们提到过和通过创建 TaskRun 去触发 Task 任务类似,我们可以通过创建一个 PipelineRun 对象来运行流水线。这里我们创建一个名为 test-pipelinerun.yaml 的 PipelineRun 对象来运行流水线,文件内容如下所示:
apiVersion:tekton.dev/v1beta1kind:PipelineRunmetadata:name:test-pipelinerunspec:serviceAccountName:build-sapipelineRef:name:test-pipelineresources:-name:demo-git#指定输入的git仓库资源resourceRef:name:demo-git-name:harbor-image#指定输出的镜像资源resourceRef:name:harbor-image
定义方式和 TaskRun 几乎一样,通过 serviceAccountName 属性指定 ServiceAccount 对象,pipelineRef 关联流水线对象。同样直接创建这个资源,创建后就会触发我们的流水线任务了:
$kubectlapply-ftest-pipelinerun.yamlpipelinerun.tekton.dev/test-pipelineruncreated$githubkubectlgetpods|greptest-pipelineruntest-pipelinerun-build-and-push-62g65-pod-6jqqf0/4Init:1/203stest-pipelinerun-test-c4r9m-pod-j7jjd0/2Completed012s$tknpipelinerundescribetest-pipelinerunName:test-pipelinerunNamespace:defaultPipelineRef:test-pipelineServiceAccount:build-saTimeout:1h0m0sLabels:tekton.dev/pipeline=test-pipeline