云原生强大且灵活的持续集成CI开源框架Tekton实战-上
@
概述
定义
Tekton 官网地址 https://tekton.dev/
Tekton 最新官网文档 https://tekton.dev/docs/
Tekton GitHub源码地址 https://github.com/tektoncd
Tekton是一个强大、灵活的构建 CI/CD 流水线系统的开源框架,允许开发者构建、测试和发布应用。Tekton 是云原生的,通过定义 CRD ,让用户快速灵活定义流水线;
Tekton是构建CI/CD系统的本地云解决方案。它由提供构建块的Tekton pipeline和支持组件组成,如Tekton CLI和Tekton Catalog,使Tekton成为一个完整的生态系统;Tekton也是CD基金会(一个Linux基金会项目)的一部分;以yaml文件编排应用构建及部署流程,是一个纯云原生的标准化CICD流水线构建、测试和部署流程的工具。
常见CICD工具
使用好处
- 可定制的:Tekton实体是完全可定制的,从而具有高度的灵活性。平台工程师可以定义非常详细的构建基目录,以供开发人员在各种情况下使用。
- 可重复使用的:Tekton实体是完全可移植的,因此一旦定义,组织内的任何人都可以使用给定的管道并重用其构造块。这使开发人员可以快速构建复杂的管道,而无需“重新发明轮子”。
- 可扩展的:Tekton Catalog是Tekton社区驱动的存储库。您可以使用Tekton目录中的预制组件快速创建新的并展开现有管道。
- 标准化:Tekton在您的Kubernetes集群上作为扩展安装并运行,并使用完善的Kubernetes资源模型。 Tekton工作负载在Kubernetes容器中执行。
- 缩放性:为了增加工作负载容量,您可以简单地将节点添加到群集。 Tekton与您的群集进行缩放,无需重新定义您的资源分配或对管道的任何其他修改。
组件
- Tekton Pipelines:tekton 的基础,定义了一组 CRD,用于定义 pipeline
- Tekton Triggers:允许基于 event 实例化 pipeline。比如:git的pr请求
- Tekton Cli:提供命令行工具和 tekton 交互
- Tekton Dashboard:图形化界面展示 pipeline 信息
- Tekton Catalog:高质量的、社区贡献的 pipeline 仓库
- Tekton Hub:图形化界面访问 tekton catalog
- Tekton Operator:在k8s上安装、移除、更新tekton组件的项目
基本概念
Tekton引入了任务的概念,它指定了你想要运行的工作负载;Tekton 最重要的五个概念:Task、TaskRun、Pipeline、PipelineRun、PipelineResources:
- Task:Tekton中的最小单元,代表一个任务模板,包括多个步骤。每一个操作定义为Task中的一个step
- Pipeline:多个 Task 组成的有向无环图,定义了流水线的模板
- PipelineRun:Pipeline 真正执行时需要定义一个PipelineRun,作为流水线的实例,生成一条流水线记录
- TaskRun:Task 真正执行的实例,记录任务状态。一个TaskRun 会创建一个对应的 Pod,每个 step 对应 pod 中的一个 container
- PipelineResource:流水线执行过程中需要的资源信息
每个任务在它自己的Kubernetes Pod中执行。因此,默认情况下,Pipeline中的任务不共享数据。要在任务之间共享数据,必须显式地配置每个任务,使其输出可用于下一个任务,并将先前执行的任务的输出作为其输入。
安装
前提条件
安装kubectl
安装K8S集群
- minikube部署用于开发测试的K8S集群。
# 先要安装docker,然后安装kubectl
wget "https://storage.googleapis.com/kubernetes-release/release/v1.18.8/bin/linux/amd64/kubectl"
chmod 777 kubectl
mv kubectl /usr/local/bin
# 安装minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
install minikube-linux-amd64 /usr/local/bin/minikube
minikube start
# 创建新用户,这步不是必要
adduser K8S //创建K8S用户
passwd K8S //设置密码asdfwsxedc
# 将创建的新用户加入到docker组中,,这步不是必要
groupadd mydocker
gpasswd -a K8S mydocker //$USER为上面创建的K8S用户
newgrp mydocker
docker version
# 启动minikube
minikube start
# 卸载minikube
minikube delete
#也可以使用--registry-mirror=https://registry.docker-cn.com, running minikube within a VM, consider using --driver=none,--image-mirror-country='cn'
minikube start --force --driver=docker
- Kubekey部署单节点K8S集群,详细可以参考前面的文章《云原生下基于K8S声明式GitOps持续部署工具ArgoCD实战-上》
安装Tekton Pipelines
- 官方部署方式
# 使用kubectl安装最新版本的Tekton pipeline
kubectl apply --filename \
https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
- 修改镜像地址方式
# 创建资源时,pull 镜像用的镜像库是国外的,gcr.io 需要替换成国内的镜像源:gcr.azk8s.cn;如果使用原来的gcr.io , 资源创建成功后在启动的过程中,pod状态一直是 imagepullbackoff , 查看pod 内部,是无法pull 镜像所致。
# 官方提供release.yaml中需要的镜像是从谷歌云拉取的,国内的环境可能拉不到镜像
kubectl get pods --namespace tekton-pipelines --watch
kubectl get pods --namespace describe pod <pod-id>
kubectl --namespace tekton-pipelines describe pods
# 创建目录
mkdir tekton
# 下载yaml 文件,注意如果因为我们下面要替换的国内源不是即时更新的,有一个同步时间差,如果下载latest release 可能会遇到下载到昨天发布的最新版本,而使用国内源时会出现找不到最新镜像ID. 所以在更新之前可以在官网看一下最新版本是不是昨天才更新的版本,如果是建议选上一个版本,如果latest 是几天之前的,则没有问题。
#修改yaml 里面的镜像库
vi release.yaml
wget https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
%s/gcr.io/gcr.azk8s.cn/g
#重新创建资源
kubectl apply -f release.yaml
- 阿里云资源方式
# 上面的都还是有问题,最后可以使用阿里云的资源,这一个可以成功的创建
kubectl apply -f http://my-oss-testing.oss-cn-beijing.aliyuncs.com/k8s/tekton/release.yaml
kubectl get pods -n tekton-pipelines
安装完后后,可以看到在Kubernetes集群中新增了哪些Tekton的crd
创建并运行任务
创建并运行一个基本任务,Task在API中表示为Task类对象,它定义了一系列按顺序运行的步骤,以执行Task所需的逻辑。每个Task都作为一个pod在Kubernetes集群上运行,每个步骤都在自己的容器中运行。创建vi hello-world.yaml
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: hello
spec:
steps:
- name: echo
image: alpine
script: |
#!/bin/sh
echo "Hello World,itxs"
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: hello
spec:
steps:
- name: echo
image: ubuntu # contains bash
script: |
#!/usr/bin/env bash
echo "Hello World,itxs"
应用到集群的更改
kubectl apply --filename hello-world.yaml
要运行此Task,必须使用TaskRun实例化它。创建另一个名为hello-task-run的文件Yaml,内容如下:
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
name: hello-task-run
spec:
taskRef:
name: hello
将更改应用到集群以启动任务
kubectl apply --filename hello-task-run.yaml
# 验证运行是否正常
kubectl get taskrun hello-task-run
# 查看容器运行日志
kubectl logs --selector=tekton.dev/taskRun=hello-task-run
安装Dashboard
- 官方部署方式
kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/latest/tekton-dashboard-release.yaml
- 阿里云资源方式
# 安装一个 Tekton 提供的一个 Dashboard,我们可以通过 Dashboard 查看 Tekton 整个任务的构建过程,直接执行下面的命令直接安装即可
kubectl apply -f http://my-oss-testing.oss-cn-beijing.aliyuncs.com/k8s/tekton/dashboard.yaml
安装完后,可以查看其svc资源,类型为NodePort,暴露30952端口
访问http://tekton.com:30952/ ,这里我是作为host解析,所以可以域名访问
安装Cli
# 下载rpm或者二进制包
wget https://github.com/tektoncd/cli/releases/download/v0.26.0/tektoncd-cli-0.26.0_Linux-64bit.rpm
# rpm安装
rpm -Uvh tektoncd-cli-0.26.0_Linux-64bit.rpm
tkn task list
tkn --help
Pipelines示例演示
演示步骤如下
- 创建两个任务。其中一个任务用2.3节的任务
- 创建一个包含任务的管道。
- 使用PipelineRun实例化并运行包含任务的管道。
创建goodbye-world.yaml
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: goodbye
spec:
steps:
- name: goodbye
image: alpine
script: |
#!/bin/sh
echo "Goodbye World,itxs"
# 应用第二个任务
kubectl apply --filename goodbye-world.yaml
# 管道定义了一个按特定执行顺序排列的有序任务系列,作为CI/CD工作流的一部分,创建管道包含前面两个任务
vi hello-goodbye-pipeline.yaml
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: hello-goodbye
spec:
tasks:
- name: hello
taskRef:
name: hello
- name: goodbye
runAfter:
- hello
taskRef:
name: goodbye
# 应用管道
kubectl apply --filename hello-goodbye-pipeline.yaml
# 用PipelineRun对象实例化你的Pipeline。创建一个名为hello-goodbye-pipeline-run的新文件。Yaml,内容如下
vi hello-goodbye-pipeline-run.yaml
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
name: hello-goodbye-run
spec:
pipelineRef:
name: hello-goodbye
# 通过将PipelineRun配置应用到集群来启动Pipeline:
kubectl apply --filename hello-goodbye-pipeline-run.yaml
# 使用如下命令查看PipelineRun的日志:
tkn pipelinerun logs hello-goodbye-run -f -n default
后续再补充基于Tekton的CI结合ArgoCD的CD实现完美新一代云原生组合
**本人博客网站 **IT小神 www.itxiaoshen.com
云原生强大且灵活的持续集成CI开源框架Tekton实战-上的更多相关文章
- Jenkins+Gitlab搭建持续集成(CI)环境
利用Jenkins+Gitlab搭建持续集成(CI)环境 Permalink: 2013-09-08 22:04:00 by hyhx2008in intern tags: jenkins gitla ...
- 基于Jenkins的持续集成CI
CI(continuous integration)持续集成 一次构建:可能包含编译,测试,审查和部署,以及其他一些事情,一次构建就是将源代码放在一起,并验证软件是否可以作为一个一致的单元运行的过程. ...
- Gitlab+Gitlab-CI+Docker实现持续集成(CI)与持续部署(CD)
写在前面 记录一下,一个自动化开发部署项目的构建过程与简单使用,实现真正的DevOps gitlab安装 步骤一:安装依赖 yum -y install git gcc glibc-static te ...
- 【OF框架】在Azure DevOps中配置项目持续集成CI服务,推送镜像到Azure容器注册表
准备工作 开通Azure账号,具有开通服务权限,关键是里面要有钱. 开通Azure DevOps,能够创建组织和项目. 具备一定的DevOps知识,了解CICD概念.Docker基本操作. 一.创建& ...
- 柯基数据通过Rainbond完成云原生改造,实现离线持续交付客户
1.关于柯基数据 南京柯基数据科技有限公司成立于2015年,提供一站式全生命周期知识图谱构建和运维.智能应用服务,致力于"链接海量数据,从大数据中挖掘智慧".帮助企业运用知识 ...
- 持续集成CI与自动化测试
-------------------------------------------------------------------------------------------------- ...
- GitLab、Jenkins结合构建持续集成(CI)环境
1 持续集成 概述及运行流程 1.1 持续集成概述 持续集成概述:持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并迚程自 ...
- CentOS 7 部署Gitlab+Jenkins持续集成(CI)环境
持续集成概述及运行流程 : 持续集成概述 :持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中 ,可以频繁的将代码部署集成到主干,并进行自动化测试 开发→代 ...
- 持续集成CI
一.CI 和 CD 持续集成是什么? 持续集成(Continuous integration,简称CI)指的是,频繁地(一天多次)将代码集成到主干.让产品可以快速迭代,同时还能保持高质量. 持续交付( ...
随机推荐
- C#Lambda表达式演变和Linq的深度解析
Lambda 一.Lambda的演变 Lambda的演变,从下面的类中可以看出,.Net Framwork1.0时还是用方法实例化委托的,2.0的时候出现了匿名方法,3.0的时候出现了Lambda. ...
- MySQL Shell无法拉起MGR集群解决办法
MySQL Shell无法拉起MGR集群解决办法 用MySQL Shell要重新拉起一个MGR集群时,可能会提示下面的错误信息: Dba.rebootClusterFromCompleteOutage ...
- PerfView专题 (第七篇):如何洞察触发 GC 的 C# 代码?
一:背景 上一篇我们聊到了如何用 PerfView 洞察 GC 的变化,但总感觉还缺了点什么? 对,就是要跟踪到底是什么代码触发了 GC,这对我们分析由于 GC 导致的 CPU 爆高有非常大的参考价值 ...
- Excelize 发布 2.6.1 版本,支持工作簿加密
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准.可以使用它来读取.写入由 Microsoft Exc ...
- 轻松月薪过万,NISP证书含金量有多重|NISP管理中心|网安伴|nisp
nisp一级证书含金量 NISP一级证书是面向各个行业工作人员信息安全意识普及化和网络信息安全基础培训的国家级验证.持NISP一级证书可以从信息安全保密较高的单位得到加分.证书由中国信息安全测评中心授 ...
- PerfView专题 (第十一篇):使用 Diff 功能洞察 C# 内存泄漏增量
一:背景 去年 GC架构师 Maoni 在 (2021 .NET 开发者大会) [https://ke.segmentfault.com/course/1650000041122988/section ...
- 分布式版本控制系统Git的使用;
1.什么是Git Git是一个分布式的版本控制软件: 软件,类似于qq.office等安装到电脑才能使用的工具. 版本控制,类似于毕业论文,视频剪辑等需要反复修改和保留原历史数据: 分布式 文件夹拷贝 ...
- [CF1537E] Erase and Extend (字符串)
题面 给一个长度为 n \tt n n 的字符串,你可以进行无限次以下两种操作之一: 删去末尾的字符(此时要保证删去后字符串非空). 把当前整个字符串复制一份,接到自己的后面. 输出最终通过操作能达到 ...
- [2021.4.9多校省选模拟35]隐形斗篷 (prufer序列,背包DP)
题面 我编不下去了! 给出 n n n 个点,第 i i i 个点的度数限制为 a i a_i ai,现在需要选出 x x x 个点构成一颗树,要求这 x x x 个点中每个点的度数不超过这个点的 ...
- Prometheus教程
Prometheus介绍 主要特征 使用时间序列数据(tsdb)的多维度数据模型 灵活的查询语言(PromQL) 不依赖分布式存储,单个节点是自主的 通过http请求拉取(pull)时间序列数据(ts ...