wwqdrh

简介

基于声明式API的流水线, Tekton组件目录(Tekton Catalog)是一个社区驱动的Tekton组件的存储仓库, 任何用户可直接获取并基于此构建复杂流水线, 而无需开发

  • 自定义
  • 可重用
  • 可扩展性
  • 标准化
  • 规模化支持

tekton可以完成CICD的所有工作,也可以接入argocd,让tekton专注于CI,CD则交给ArgoCD

安装

tekton的组件包括dashboard、tkn(cli)、trigger、interceptors

# dashboard
kubectl apply --filename https://github.com/tektoncd/dashboard/releases/latest/download/tekton-dashboard-release.yaml

# tkn
# 需要在github中下载release
wget https://github.com/tektoncd/cli/releases/download/v0.23.1/tkn_0.23.1_Linux_x86_64.tar.gz

tar -zxvf tkn_0.23.1_Linux_x86_64.tar.gz

mv … /usr/local/bin/tkn # 移动到指定的bin目录下

# trigger
kubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.13.0/release.yaml 

kubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.13.0/interceptors.yaml 

配置用户角色

kubectl apply -f https://raw.githubusercontent.com/arthurk/tekton-triggers-example/master/01-rbac.yaml

核心资源对象

流水线

  • Task:Tekton中的最小单元,代表一个任务模板,包括多个步骤。每一个操作定义为Task中的一个step
  • Pipeline:多个 Task 组成的有向无环图,定义了流水线的模板
  • PipelineRun:Pipeline 真正执行时需要定义一个PipelineRun,作为流水线的实例,生成一条流水线记录
  • TaskRun:Task 真正执行的实例,记录任务状态。一个TaskRun 会创建一个对应的 Pod,每个 step 对应 pod 中的一个 container
  • PipelineResource(beta1版本后不再使用):流水线执行过程中需要的资源信息

事件监听

  • EventListener:监听器,提供http接口外部事件入口 ,以便于外部事件推送,比如配置Gitlab的Webhook。
  • Trigger:指定当EventListener检测到事件发生时会发生什么,它会定义TriggerBinding、TriggerTemplate以及可选的Interceptor。
  • TriggerTemplate:用于模板化资源,根据传入的参数实例化Tekton对象资源,比如TaskRun、PipelineRun等。
  • TriggerBinding:用于捕获事件中的字段并将其存储为参数,然后会将参数传递给TriggerTemplate。
  • ClusterTriggerBinding:和TriggerBinding相似,用于提取事件字段,不过它是集群级别的对象。
  • Interceptor:拦截器,在TriggerBinding之前运行,用于负载过滤、验证、转换等处理,只有通过拦截器的数据才会传递给TriggerBinding。

使用示例

纯tekton

可以编写task,直接使用taskrun运行;或者使用template编排多个task, 定义了pipeline之后再定义pipelinerun进行执行

---task
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: hello
  namespace: tekton-test
spec:
  steps:
    - name: hello
      image: ubuntu
      command:
        - echo
      args:
        - "Hello World!"


---taskrun
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  namespace: tekton-test
  name: hello-task-run
spec:
  taskRef:
    name: hello

---pipeline
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: hello-goodbye
  namespace: tekton-test
spec:
  tasks:
    - name: hello
      taskRef:
        name: hello
    - name: goodbye
      runAfter:
        - hello
      taskRef:
        name: goodbye

----pipelinerun
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: hello-goodbye-run
  namespace: tekton-test
spec:
  pipelineRef:
    name: hello-goodbye

tekton+argocd

  • 新建应用编排配置仓库
  • argocd监控配置仓库
  • 使用tekton构建工作流
  • 构建镜像,推送至镜像仓库,修改配置仓库
  • argocd监听到配置仓库更改,开始应用部署的流程