关于TEKTON和OPENSHIFT PIPELINE
Tekton是Google推崇的云原生(就是面向Kubernetes)开源CICD框架,2019年已经得到Redhat等云厂商的支持。在OpenShift 4的OpenShift Pipeline中已经通过Operator Frame集成了Tekton框架,这样无需复杂集成和操作,我们就可实现各种基于Tekton的CICD Pipeline构建、操作、运行和监控了。
TEKTON核心概念

在K8s或OpenShift中Tekton Pipeline是通过CRDs的方式进行定义的。一个Pipeline需要我们定义3种对象:
- Task:用来定义要在CICD中要干的一件事。Task中可以包括多个step,每个step定义一个独立操作。例如下面定义了一个在ubuntu容器中输出hello world的任务。

- Pipeline:用来定义按照指定顺序执行的一组Task。
- PipelineResource:在Pipeline运行期间向执行的Task传递参数,这些参数主要和环境相关,例如git repository的地址。
在运行Tekton Pipeline的时候,OpenShift会使用TaskRun和PipelineRun对象分别运行Tesk和Pipeline。Pipeline会按照指定的顺序执行Task,并获取结果。
本CICD PIPEINE场景说明
本CICD Pipeline场景OpenShift的S2I首先从git repository获取基于Spring Boog的PetClinic应用代码,然后build代码,再和基础镜像(base image)打包生成应用镜像(app image)推送到OpenShift内部的Image Registry,最后再部署到OpenShift上并运行。

环境说明
本实验已经验证的运行环境:
- OpenShift 4.2(搭建All-in-One集群可参见“配置OpenShift 4 单机版环境 – CodeReady Container”)
- Tekton Client 0.5.1
操作步骤
安装配置TEKTON OPERATOR
1.用admin身份登录OpenShift Cosole,进入Administrator视图。
2.通过菜单进入Operators–>OpeartorHub。
3.查找到OpenShift Pipelines Operator,并点击进入。
4.在OpenShift Pipelines Operator介绍界面中点击Install。
5.在Create Operator Subscription界面中接受缺省选项,点击Subscribe。
6.通过菜单进入Operators–>Installed Opeartors。(可能需要等一会)可以看到刚刚安装好的OpenShift Pipelines Operator.

7.通过链接进入这个Operator的配置,然后在OpenShift Pipelines Config中点击Create Config。
8.在Create Config页面中接受缺省的yaml配置,然后点击Create。
配置OPENSHIFT
创建OPENSHIFT项目和应用对象
1.执行命令,创建一个项目
$ oc new-project pipelines-tutorial
2.执行命令,验证是否有名为pipeline的ServiceAccount
$ oc get serviceaccount pipeline NAME SECRETS AGE pipeline 2 12h
3.执行命令创建除images以外的应用对象。在创建完后应用并不能运行,要等App Image构建完后OpenShift才可生成Pod并运行应用。
$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/master/petclinic/manifests.yaml
创建TASK
1.执行命令创建2个Task对象,分别是openshift-client和s2i-java-8。
$ oc create -f https://raw.githubusercontent.com/openshift/tektoncd-catalog/release-v0.7/openshift-client/openshift-client-task.yaml $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-catalog/release-v0.7/s2i-java-8/s2i-java-8-task.yaml
2.在执行成功后可以用命令验证其状态
$ oc get task NAME AGE openshift-client 15h s2i-java-8 15h
3.也可以用Tekton的的客户端获取Task的状态
$ tkn task ls NAME AGE openshift-client 15h s2i-java-8 15h
创建PIPELINE
4.执行命令,创建Pipeline对象
$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/master/pipeline/01-build-deploy.yaml
5.执行命令查看Pipeline状态
$ tkn pipeline ls NAME AGE LAST RUN STARTED DURATION STATUS petclinic-deploy-pipeline 25 seconds ago --- --- --- ---
创建PIPELINERESOURCE
1.执行命令,获取OpenShift内部的Image Registry的访问地址(即下面的CLUSTER-IP地址)
$ oc get svc -n openshift-image-registry NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE image-registry ClusterIP 172.30.123.232 <none> 5000/TCP 28d
2.下载定义PipelineResource的yaml文件,其中定义了2个PipelineResource,petclinic-git和petclinic-image,分别定义应用的git repository和生成的App Image推送的位置。我们需要将其中的“image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/spring-petclinic”替换为上一步获得的CLUSTER-IP地址。
$ curl -o pipelineresources.yaml https://raw.githubusercontent.com/openshift/pipelines-tutorial/master/pipeline/02-resources.yaml
3.执行命令创建PipelineResource,然后查看其状态:
$ oc create -f pipelineresources.yaml $ tkn resource ls NAME TYPE DETAILS petclinic-git git url: https://github.com/spring-projects/spring-petclinic petclinic-image image url: image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/spring-petclinic
运行PIPELINE
1.通过命令运行Tekton Pipeline,然后查看其状态。当前是Running状态,在运行完后可再次执行,其状态会变为Succeeded。
$ tkn pipeline start petclinic-deploy-pipeline \ -r app-git=petclinic-git \ -r app-image=petclinic-image \ -s pipeline $ tkn pipeline list NAME AGE LAST RUN STARTED DURATION STATUS petclinic-deploy-pipeline 51 seconds ago petclinic-deploy-pipeline-run-12Bs7 51 seconds ago --- Running
2.上述开始执行pipeline的过程也可在OpenShift Console中的Developer视图里完成。只需要进入Pipeline菜单并找到petclinic-deploy-pipeline,然后在Actions中点击Start即可。

3.除了可以在以上Pipeline的Console查看执行log外,还可执行命令查看Pipeline的执行情况:
$ tkn pipeline logs -f
4.执行以下命令可以查看TaskRun和PipelineRun的执行状态
$ oc get taskruns NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME petclinic-deploy-pipeline-run-2c2lh-build-8xlgx True Succeeded 17h 16h petclinic-deploy-pipeline-run-2c2lh-deploy-bnqtb True Succeeded 16h 16h [dawnsky@rhel81-960 crc]$ oc get pipelineruns NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME petclinic-deploy-pipeline-run-2c2lh True Succeeded 17h 16h
5.在Pipeline执行成功后,我们可以在Openshift控制台Developer视图的Topology中看到spring-petclinic应用的状态已经是蓝色可访问状态。

6.最后点击Route的链接即可访问到应用
