tekton之Task&TaskRun概念篇

tekton之Task&TaskRun概念篇

1 Tasks

1.1 task定义和简单使用

Tasks就是任务,任务是你希望在连续集成流程中运行的顺序步骤的集合。1个task在k8s集群中是以pod的形式运行,task中的每个step都是由各自的容器去完成step。举个例子:

apiVersion: tekton.dev/v1alpha1
kind: Task
metadata:
  name: echo-hello-world
spec:
  steps:
    - name: echo
      image: ubuntu
      command:
        - echo
      args:
        - "hello world"

上面这个task中的steps后面就是各个step。这边只有一个step,该step的内容就是在ubuntu:latest容器中运行 echo "hello world"这个命令,你可以在在一个task中定义多个step,每个step还可以执行脚本,后面我会加一个执行脚本的例子。你光创建task资源,任务不会执行,需要使用taskRun才可以运行task。下面简单定义一个taskRun:

这两个yaml创建后,就可以跑任务了,查看运行的任务情况,使用tkn命令前需要先安装tekton CLI地址arrow-up-right, 这边简单介绍下linux下安装tekton cli:

然后运行tkn命令查看taskrun任务: tkn taskrun describe echo-hello-world-task-run 可以看下如下输出:

当然对于想进一步获取task中每个step日志信息的用户可以去这个地址上看下 logarrow-up-right。我这边参见下面的章节有专门讲述日志的。

task的step可用于执行脚本,如下所示:

step中可执行脚本,可操作性大,可以在容器中执行你要的任务。

1.2 task的输入和输出

在常用的场景中,task需要多个步骤(step)来处理输入和输出资源,例如task需要从Github上拉代码仓库或者构建docker镜像。PipelineResources就是被用来定义任务输入和输出的工件,有几种系统定义的资源类型可供使用,以下是两个常用资源的示例。 这是一个定义git的pipelineResource

这是定义docker image的pipelineResource:

1.3 task、pipelineResource和taskRun使用场景

这三者连用就可以实现的场景就是制作镜像并推送到仓库。代码源来自Github,可以是公有仓库代码也可以是私有仓库代码,拉下来之后根据代码是java还是golang进行构建编译,最后根据仓库中的Dockerfile进行镜像制作,制作完成可以推送到公有云容器镜像仓库或者你的私有仓库。这类场景是我用tekton的初衷。之后会分享出来,尽情期待。

2 TaskRun

2.1 定义

使用TaskRun资源对象创建并运行群集上的进程以完成操作。task只是定义了一个任务模版,taskRun才真正代表了一次实际的运行,启动taskrun才可以运行task,当然你也可以自己手动创建一个taskRun,taskRun创建出来之后,就会自动触发task描述的构建任务。taskRun只有当task的所有Step都执行完成才会运行完。

2.2 使用

在taskrun中引用task的方式:

在taskrun中直接定义task的内嵌:

taskrun中设置参数:

提供resource: task需要inputresource和outputresouce,分别代表task的输入资源和输出资源,可以由已有的pipelineresource提供:

当然你直接可以在taskrun中定义这些resource:

配置超时时间: default-timeout-minutes未设置的i情况下,默认60分钟,也就是说如果taskrun在60分钟内没有运行完成,就会自动kill taskrun,以免挂着占用资源,这个参数可以在config/config.yaml中修改,这个之后会有案例。 下面是task和taskrun联合使用的例子:

总结

本篇只介绍了task和taskrun的基本概念,属于教程类,后面我会根据实际需要写一个完整的例子,便于大家理解和实际使用。

最后更新于