首页 > 其他分享 >Tekton Tasks 基础

Tekton Tasks 基础

时间:2023-12-01 18:44:42浏览次数:44  
标签:Task workspaces name image 基础 Tekton Tasks path description

Tasks 概述

Task是一系列Step的组合,每个Step主要负责运行特定的构建或交付工具从而完成相关的一次特定事项;Task以Kubernetes集群上Pod运行。Task是名称空间级别的资源。

Tasks 组成

Parameters:是使得Task及Pipeline资源定义出的“模板”更加具有通用性的关键要素之一
Steps:具体执行的任务
Workspaces:由Task声明的,且需要由TaskRun在运行时提供的文件系统
Results:它将Task中Step生成的结果保存于临时文件中

Results

Results 概述

在Pipeline的Task之间使用同一个共享的Workspace可以完成数据共享,但对于简单的字符串数据的传递,则可以使用Results API完成;
Results用于让Task及其Step保存执行结果,并可在同一Pipeline中的后续Task中调用该结果;

Results 保存路径

Task将会为每个results条目自动创建一个文件以进行保存,这些文件统一放置于/tektons/results目录中;
每个results条目的相关值(value)需要在Step中进行生成并保存,且Task不会对相关数据进行任何多余的操作;

Results 变量

在Task中引用Results时使用的变量

results.<resultName>.path
results['<resultName>'].path 或 results["<resultName>"].path

在Pipeline中引用Results时使用的变量

tasks.<taskName>.results.<resultName>
tasks.<taskName>.results['<resultName>'] 或 tasks.<taskName>.results["<resultName>"]

Workspace

Workspace 概述

Workspace用于为Task中的各Step提供工作目录,基于该Task运行的TaskRun需要在运行时提供该目录

Workspace 运行方式

TaskRun的实际运行形式为Pod,因而Workspace对应的实际组件为Pod上的Volume
由Task声明的,且需要由TaskRun在运行时提供的文件系统;通常对应于Kubernetes上的ConfigMap、Secret、emptyDir、静态PVC类型的卷,或者是VolumeClaimTemplate动态请求的PVC;emptyDir的生命周期与Pod相同,因此仅能在一个TaskRun的各Step间共享数据;若要跨Task共享数据,则需要使用PVC;
ConfigMap和Secret:只读式的Workspace
PersistentVolumeClaim:支持跨Task共享数据的Workspace
   静态预配
   动态预配:基于VolumeClaimTemplate动态创建
emptyDir:临时工作目录,用后即弃

Workspace 作用

1. 跨Task共享数据
2. 借助于Secrets加载机密凭据
3. 借助于ConfigMap加载配置数据
4. 持久化存储数据
5. 为Task提供缓存以加速构建过程

Workspace 变量

$(workspaces.<name>.path):由<name>指定的Workspace挂载的路径,对于可选且TaskRun未声明时,其值为空;
$(workspaces.<name>.bound):其值为true或false,用于标识指定的Workspace是已经绑定;对于optional为false的Workspace,该变量的值将始终为true;
$(workspaces.<name>.claim):由<name>标示的Workspace所使用的PVC的名称;对于非PVC类型的存储卷,该变量值为空;
$(workspaces.<name>.volume):由<name>标示的Workspace所使用的存储卷的名称;

Task 资源清单

apiVersion: tekton.dev/v1   # 指定 API 版本。
kind: Task                  # 将此资源对象标识为一个Task对象。
metadata:                   # 指定唯一标识 Task资源对象的元数据。例如,一个name.
  name: hello
spec:                       # 指定该资源对象Task的配置信息
  workspaces:
    - name: signals         # 必选字段,该Workspace的唯一标识符
      description:          # 描述信息,通常标明其使用目的
      mountPath:            # 在各Step中的挂载路径,默认为“/workspace/<name>”,其中<name>是当前Workspace的名称
      readOnly:             # 是否为只读,默认为false
      optional:             # 是否为可选,默认为false
 
  results:
    - name: current-date-unix-timestamp   # 唯一名称
      description:                        # 描述信息
                
  params:                   # 定义变量信息
    - name:                 # 变量名称
      type: string          # 参数类型,有string、array (beta feature)、object (beta feature),默认值 string
      description:          # 描述信息
      default:              # 默认值
      enum: ["v1", "v2"]    # 枚举
      value:                # 静态赋值
    - name: gitrepo
      type: object
      properties:
        url:
          type: string
        commit:
          type: string
    - name: flags
      type: array
  
  steps:
    - name:                                           # task名称                      
      image:                                          # 执行task的镜像
      command: ["echo"]                               # 执行的命令
      args: ["push", "$(params.gitrepo)"]             # 执行命令的参数
      script: |                                       # 指定运行的脚本,多行脚本,可以使用“|”启用,script同command互斥
        #!/usr/bin/env bash
        echo "Hello from Bash!" 
        date +%s | tee $(results.current-date-unix-timestamp.path)  # 调用results结果
        
      securityContext:                                # 设置允许容器用户id
        runAsUser: 2000 
      env:                                            # 设置环境变量
        - name: 
          value: 
      computeResources:                               # 资源限制
        requests:
          memory: 1Gi
          cpu: 500m
        limits:
          memory: 2Gi
          cpu: 800m
      timeout: 60s                                    # 超时时间,例如 1s 或 1ms
      one rror: continue                               # 本次step执行失败则跳过本次任务,继续向下执行其它step
      stdoutConfig:                                   # 标准输出
        path: ...
      stderrConfig:                                   # 标准错误输出
        path: ...
      
  sidecars:
    - image: alpine
      # Note: must explicitly include volumeMount for the workspace to be accessible in the Sidecar
      volumeMounts:
        - name: $(workspaces.signals.volume)       # 调用workspace
          mountPath: $(workspaces.signals.path)

Task 示例

apiVersion: tekton.dev/v1
kind: Task
metadata:
  name: git-clone
spec:
  description: Clone the code repository to the workspace. 
  params:
    - name: git-repo-url
      type: string
      description: git repository url to clone
    - name: git-revision
      type: string
      description: git revision to checkout (branch, tag, sha, ref)
  workspaces:
    - name: source
      description: The git repo will be cloned onto the volume backing this workspace
  steps:
    - name: git-clone
      image: alpine/git:v2.36.1
      script: | 
        git clone -v $(params.git-repo-url) $(workspaces.source.path)/source
        cd $(workspaces.source.path)/source && git reset --hard $(params.git-revision)
---
apiVersion: tekton.dev/v1
kind: Task
metadata:
  name: build-to-package
spec:
  description: build application and package the files to image
  workspaces:
    - name: source
      description: The git repo that cloned onto the volume backing this workspace
  steps:
    - name: build
      image: maven:3.8-openjdk-11-slim
      workingDir: $(workspaces.source.path)/source
      volumeMounts:
        - name: m2
          mountPath: /root/.m2
      script: mvn clean install
  volumes:
    - name: m2
      persistentVolumeClaim:
        claimName: maven-cache
---
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: generate-build-id
spec:
  params:
    - name: version
      description: The version of the application
      type: string
  results:
    - name: datetime
      description: The current date and time
    - name: buildId
      description: The build ID
  steps:
    - name: generate-datetime
      image: ikubernetes/admin-box:v1.2
      script: |
        #!/usr/bin/env bash
        datetime=`date +%Y%m%d-%H%M%S`
        echo -n ${datetime} | tee $(results.datetime.path)
    - name: generate-buildid
      image: ikubernetes/admin-box:v1.2
      script: |
        #!/usr/bin/env bash
        buildDatetime=`cat $(results.datetime.path)`
        buildId=$(params.version)-${buildDatetime}
        echo -n ${buildId} | tee $(results.buildId.path)
---
apiVersion: tekton.dev/v1
kind: Task
metadata:
  name: image-build-and-push
spec:
  description: package the application files to image
  params:
    - name: dockerfile
      description: The path to the dockerfile to build (relative to the context)
      default: Dockerfile
    - name: image-url
      description: Url of image repository
    - name: image-tag
      description: Tag to apply to the built image
  workspaces:
    - name: source
    - name: dockerconfig
      mountPath: /kaniko/.docker
  steps:
    - name: image-build-and-push
      image: gcr.io/kaniko-project/executor:debug
      securityContext:
        runAsUser: 0
      env:
        - name: DOCKER_CONFIG
          value: /kaniko/.docker
      command:
        - /kaniko/executor
      args:
        - --dockerfile=$(params.dockerfile)
        - --context=$(workspaces.source.path)/source
        - --destination=$(params.image-url):$(params.image-tag)
---
apiVersion: tekton.dev/v1
kind: Task
metadata:
  name: deploy-using-kubectl
spec:
  workspaces:
    - name: source
      description: The git repo
  params:
    - name: deploy-config-file
      description: The path to the yaml file to deploy within the git source
    - name: image-url
      description: Image name including repository
    - name: image-tag
      description: Image tag
  steps:
    - name: update-yaml
      image: alpine:3.16
      command: ["sed"]
      args:
        - "-i"
        - "-e"
        - "s@__IMAGE__@$(params.image-url):$(params.image-tag)@g"
        - "$(workspaces.source.path)/source/deploy/$(params.deploy-config-file)"
    - name: run-kubectl
      image: lachlanevenson/k8s-kubectl
      command: ["kubectl"]
      args:
        - "apply"
        - "-f"
        - "$(workspaces.source.path)/source/deploy/$(params.deploy-config-file)"
---

参考文档

https://tekton.dev/docs/pipelines/tasks/

标签:Task,workspaces,name,image,基础,Tekton,Tasks,path,description
From: https://www.cnblogs.com/wangguishe/p/17870545.html

相关文章

  • Linux常用基础命令
    一、文件相关1、ls命令:显示当前目录的文件信息格式:ls[参数]-a:显示所有的文件和目录2、cp命令:复制文件或目录格式:cp[参数]源文件名,目标文件名-r:复制目录-f:复制已有文件3、mkdir命令:创建目录格式:mkdir[参数]目录名-m:指定权限-p:创建多级目录4、mv命令:移动或重命名......
  • 0基础下载并安装SQLite并新建数据库
    //本文章由chatgpt-3.5协助生成。//步骤1:下载并安装SQLite(此部分有参考)访问SQLite官方DownloadPage:https://www.sqlite.org/download.html选择适用的文件:PrecompiledBinariesfor<你的操作系统>例如Windows就在PrecompiledBinariesforWindows中下载sql......
  • 软考架构师(2)——操作系统基础知识(上)
    一:操作系统引论1:操作系统的目标和作用操作系统的主要功能也正是针对四类资源进行有效的管理,及处理机管理,存储器管理,文件管理。设备管理。用户可通过以下三种方式使用计算机:一命令方式,二系统调用方式,三图形窗口方式联机命令接口(交互式命令接口):适用于分时或实时操作系统,cmd中的......
  • 部署 Tekton Triggers v0.25.3
    环境要求1.运行1.18或更高版本的Kubernetes集群;2.集群上要安装了TektonPipelines;部署TektonTriggers下载TektonTriggers#wgethttps://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml#wgethttps://storage.googleapis.com/tekton-relea......
  • 复习:Java基础-泛型方法
    泛型大家都很熟悉了泛型方法呢可能很多小伙伴都有混淆,今天来稍微复习一下泛型方法(普通方法)publicclassTest<T>{publicTf(Tc){//注意声明,使此方法成为泛型方法returnc;}}泛型方法(静态方法)这么写编译就通过不了错误写法publicclassTe......
  • go锁基础 - atomic、sema
    atomic和sema是实现go中锁的基础,简单看下他们的实现原理。atomic`atomic常用来作为保证原子性的操作。当多个协程,同时一个数据进行操作时候,如果不加锁,最终的很难得到想要的结果。varpint64=0funcadd(){ p=p+1}funcmain(){ fori:=0;i<10......
  • 前端学习-JavaScript学习-js基础-API01
    学习视频:黑马程序员视频链接DOM简介DOM简介DOM树:将HTML文档标签以树状形式表现出来DOM对象:每个标签都是DOM对象DOM核心思想:将网页内容当作对象处理DOM中最大的对象:document,其次是<html><!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metan......
  • SLAM基础-扩展卡尔曼滤波
    https://slowlythinking.github.io/2019/07/Paper_Framework-EKF/                ......
  • 从零开始的 dbt 入门教程 (dbt-core 基础篇)
    最近一直在处理数据分析和数据建模的事情,所以接触了dbt等数据分析的工具,国内目前对于dbt比较详细的资料不多,所以打算写四道五篇dbt相关的文章,本文属于dbt系列的第一篇,本篇主要阐述dbt一些基本概念,教会你如何配置dbt连接远端数据库,并运行你的第一个数据模型,那么本文开......
  • OSCP(基础篇靶机Kioptrix Level 2)
    第一步:netdiscover加nmap 第二步:通过burpsuite,利用SQLiPayloads进行SQL注入SQLiPayloads:'-''''&''^''*''or''-''or''''or''&''or'&#......