Tekton 作为一款开源的云原生 CI/CD 框架,前身是 Knative 的 build-pipeline 项目。作为 CI/CD 框架,其本身并不是一个 CI/CD 产品,所以不应拿 Tekton 与 Jenkins 或者 Drone 这样的 CI/CD 产品进行比较,Tekton 本质是一个强大而灵活的 CI/CD 框架,开发者可以基于它开发自己的 CI/CD 工具或产品,一些有能力的团队可以使用 Tekton 做为底座开发出更适合自己团队使用的 CI/CD 工具。
而 Tekton 的可视化组件 Tekton Dashboard 则为用户提供了可视化界面,使 Tekton 的体验更接近与 Jenkins 这样的 CI/CD 产品,同时开发者可以在使用 Tekton Dashboard 时也会对 Tekton 的一些概念进行更深入的了解。
本文将会使用 Tekton Dashboard,通过 UI 界面在 K8S 集群中部署一个 Java 项目:pipeline-example-maven[1]
本文还提供 katacoda 交互式学习版本,用户可以直接访问 katacoda 页面:https://katacoda.com/guoxudong/scenarios/tekton-dashboard ,使用 katacoda 在浏览器端学习使用 Tekton Dashboard。
该教程属于官方教程的汉化版,并得到了许可[2]。
这是所有步骤中最麻烦的一步,由于官方提供的 Tekton 镜像都在 gcr.io
上,在国内并不能直接拉取,所以在测试的时候着实花费了不少时间。
我特意将这些镜像转储到 dockerhub 上,如果官方版无法使用,可以使用克隆版:
安装 Tekton Pipelines[3]
# 官方
$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.10.1/release.yaml
# 克隆版
$ kubectl apply -f https://raw.githubusercontent.com/sunny0826/tekton-local/v0.10.1/tekton-pipeline.yaml
安装 Tekton Dashboard[4]
# 官方
$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/previous/v0.5.3/tekton-dashboard-release.yaml
# 克隆版
$ kubectl apply -f https://raw.githubusercontent.com/sunny0826/tekton-local/v0.10.1/tekton-dashboard.yaml
安装成功之后需要配置 Tekton Dashboard 的访问地址,可以使用 ingress 或 Nodeport 暴露端口,这里采用 port-forward
的形式将端口映射到本地:
$ kubectl port-forward svc/tekton-dashboard 8097:9097 -n tekton-pipelines
Forwarding from 127.0.0.1:8097 -> 9097
Forwarding from [::1]:8097 -> 9097
...
访问 Tekton Dashboard
打开浏览器访问访问 http://localhost:8097
点击 Import Tekton resources
进入资源导入页面,导入资源:
•Repository URL: https://github.com/sunny0826/pipeline-example-maven
•Namespace: default
•Repository directory: tekton/
•Service Account tekton-dashboard
输入内容如下:
点击 Import and Apply
按钮,之后 Dashboard 会创建一个 PipelineRun 来导入指定的 Tekton 资源。
点击页面底部的 View status of this run
链接,查看 pipeline-example-maven 导入 Tekton 资源的状态。
PipelineRun 完成后,Tekton 资源已导入成功。
选择 default
命名空间,并点击 PipelineResource
按钮。
点击页面右上方的 Create +
按钮,将弹出一个创建 PipelineResource 的表单。
我们要在 default
命名空间中为 pipeline-example-maven 的 master
分支创建一个 git PipelineResource,故在弹出的表单中填写以下信息:
•Name: pipeline-example-maven
•Namespace: default
•Type: Git
•URL: https://github.com/sunny0826/pipeline-example-maven
•Revision: master
该表单内容应如下:
点击 Create
按钮,创建 PipelineResource。
选择 default
命名空间,并点击 PipelineRuns
按钮。
点击页面右上方的 Create +
按钮,将弹出一个创建 PipelineRun 的表单。该表单是动态的,会根据所选的 Pipeline 提供 PipelineResource 和 Param 字段。
我们需要 default
命名空间中使用 pipeline-example-maven
的 Pipeline 和 PipelineResource,创建一个 PipelineRun,故在弹出的表单中填写以下信息:
•Namespace: default
•Pipeline: pipeline-example-maven
•PipelineResources source: pipeline-example-maven
•其余字段保留默认值。
该表单内容应如下:
点击 Create
按钮,创建 PipelineRun。
点击页面顶部创建通知中的链接或在 PipelineRun 列表中对应的 PipelineRun,查看 pipeline-example-maven PipelineRun 的日志。
deploy 步骤中,有时会出现权限错误,需要给 default:default 绑定上 admin 的 clusterrole 权限:
$ kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=default:default
确认 build
和 deploy
任务均已成功。
注意:这里为了方便,使用的是单节点的 Kubernetes,构建完并没有推送到镜像仓库,镜像拉取策略为
imagePullPolicy: Never
,所以启动时候也没有从远程仓库拉取镜像,而是启动的本地镜像。
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
example-greenhouse 1/1 1 1 5h2m
Tekton Dashboard 将 Tekton 的资源进行了可视化展示,指导用户快速理解 Tekton pipeline 流程以及配置方式,快速上手 Tekton。但是由于镜像的原因,导致新手体验不佳,所幸官方还提供了 katacoda 交互式教程,该教程我已汉化完成并获得了官方的许可,可以在浏览器端快速体验从安装 Tekton 到部署应用的整个过程。
[1]
pipeline-example-maven: https://github.com/sunny0826/pipeline-example-maven
[2]
许可: https://github.com/ncskier/katacoda/issues/2
[3]
Tekton Pipelines: https://github.com/tektoncd/pipeline/blob/master/docs/install.md
[4]
Tekton Dashboard: https://github.com/tektoncd/dashboard#install-dashboard