Tekton是一个ci工具类似jenkins,是有go语言开发的,也支持cd发布,他打包主要过程是通过利用k8s资源如pod进行打包,于jenkins不同的是jenkins基于java虚拟机技术,而Tekton基于docker虚拟化技术,Tekton说是谷歌开源的项目,目前看是linux cd基金会的一部分,也是一个正经的项目吧,以下是Tekton相关连接
官网 https://tekton.dev
仓库地址 https://github.com/tektoncd
文档 https://tekton.dev/docs/
以下是Tekton服务,服务运行时的服务组成部分,其实只需要tekton-pipelines-controller还有tekton-dashboard皆可
在说tekton机制原理之前可以先去看一下https://zhuanlan.zhihu.com/p/59660536 k8s核心设计之一 list/watch
用户创建taskrun,tekton通过watch机制监听到k8s配置变更,进行相关处理,主要有如下
1 创建pod进行,执行前的初始化,以下是任务执行后自动运行初始化的容器,这些自动运行的容器作为 pod 的initContainer会在 step 容器运行之前运行
- credential-initializer
- working-dir-initializer
- place-scripts
- place-tools
2 任务初始化后根据Step,顺序执行任务,以下是控制pod容器的启动顺序文章相关https://atbug.com/control-process-order-of-pod-containers/。
3 执行任务过程中数据同步,主要通过创建的工作区,实现数据共享,工作区,可以理解为一个挂在到容器上的卷,用于文件的传递
自带优点如下
- d性伸缩,执行任务过程中,会根据配置的d性伸缩策略进行任务的调度执行,通过d性伸缩能够提高资源利用率
- 数据迁移,比如你这套东西,从ci到cd到整个测试生产都用k8s,这时候你只需要买一个新集群然后将数据配置备份导入到新技术,你的集群就能迁移过去了,当然会有很多问题,但是迁移这块都是比较方便的。
- 资源隔离,这个就不说了
使用过程中的优点
- 开箱即用 安装简单方便,通过官方自带的配置文件apply直接安装,不需要配置什么东西
- 配置方便 只需要创建一个git资源,然后写一个task和taskrun,皆可实现代码的拉取,到任务的执行打包和上传,并且可以实现参数化构建也是在yaml里面写配置就行了
- 快速发布 因为是在容器内部打包,如果仓库中心也是在集群内部,那么就直接可以通过集群内网进行上传然后发布,而且在打包过程中,如果你的pod服务调度在宿主机上那么直接可以启动,不需要拉镜像,因为你打包是用宿主机进行的打包
使用过程中的缺点
-
Tekton dashboard 任务实时没有jenkins这么好用,你需要手动刷有时候,很傻逼
-
对比现有jenkins的优点在哪里
不依赖jenkins服务器进行打包,jenkins服务器如果挂了也是可以打包的,而且只要k8s有资源就可以打包,集群不崩溃就行
打包速度快,
kubectl apply -f https://raw.githubusercontent.com/LGTH/rawfile/master/tekton-v0.13.2.yaml kubectl apply -f https://raw.githubusercontent.com/LGTH/rawfile/master/tekton-trigger-0.5.0.yaml kubectl apply -f https://raw.githubusercontent.com/LGTH/rawfile/master/tekton-dashboard-0.7.0.yaml kubectl get pods --namespace tekton-pipelinesTekton 初体验
task类似于jenkins的job,而这里仅需写一个yaml皆可创建一个job,TaskRun则是运行这个job,当然你想在图形化运行也可以
cat > hello-world.yaml<在dashboard上查看运行结果
Tekton demo
本demo主要是通过git 拉取scrm项目代码,然后通过tekton进行打包,这里面不涉及到cd发布
cat > vue-job.yaml<dockerfile< 这回咱们通过他的仪表盘进行执行任务不用taskrun了
观察到k8s创建了pod基于taskrun控制器,并且有四个contain,其中初始化有上面介绍的,我们不关心只关心我们的step一个是编译一个是上传
任务结果
查看阿里云镜像仓库
启动容器并且进去看是否刚刚打包的index
以上就是vue项目scrm打包过程,过程中其实可以不用docker push上传,可以将镜像导出来,或者直接通过他内置的方法进行上传到仓库,这些没研究过但是知道有这个东西
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)