Tekton Concepts: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 34: Line 34:
{{External|https://github.com/tektoncd/pipeline/blob/main/docs/taskruns.md}}
{{External|https://github.com/tektoncd/pipeline/blob/main/docs/taskruns.md}}


A '''task run''' (or '''taskRun''') instantiates a specific [[#Task|task]] to execute on a particular set of [[#Input|inputs]] and produce a particular set of [[#Output|outputs]], within specific conditions (for example, build flags). A task run connects [[#Resource|resources]] with [[#Task|tasks]].
A '''task run''' (or '''taskRun''') instantiates a specific [[#Task|task]] to execute on a particular set of [[#Input|inputs]] and produce a particular set of [[#Output|outputs]], within specific conditions (for example, build flags). A task run connects [[#Resource|resources]] with [[#Task|tasks]]. A task run can be created via API or by a [[#PipelineRun|pipeline run]], or by a Tekton components such as [[#Tekton_Trigger|Tekton Triggers]].


<syntaxhighlight lang='yaml'>
<syntaxhighlight lang='yaml'>

Revision as of 00:49, 28 April 2022

Internal

Overview

Tekton is a cloud-native solution for building CI/CD pipelines. Tekton installs and runs as an extension on your Kubernetes cluster and uses the well-established Kubernetes resource model. Tekton workloads execute inside Kubernetes containers. It has several components: Tekton Pipelines, Tekton CLI and Tekton Catalog. Tekton is part of the CD Foundation, a Linux Foundation project. It is implemented as a set of Kubernetes Custom Resources. Once deployed, Tekton can be accessed via Tekton CLI commands or API calls.

Tekton Domain Model

Task

https://github.com/tektoncd/pipeline/blob/main/docs/tasks.md

A task defines a series of ordered steps, which are executed in order in which they are declared. The output of a step can be used as the input of the next step. Each task executes in its own Kubernetes pod, where individual steps are executed as pod's containers, so by default, tasks within a pipeline do not share data. To make tasks share data, they must be explicitly configured to make their outputs available to the next task, and to ingest the outputs of a previously executed task, as inputs. The task is implemented as a Kubernetes custom resource.

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: hello
spec:
  steps:
    - name: echo
      image: alpine
      script: |
        #!/bin/sh
        echo "Hello World"

Task Operations

Step

A step is an operation in a CI/CD workflow. An example is Java compilation or execution of unit tests. Each step is performed within a container image provided when the step is defined. A step processes a set of inputs and produces a set of outputs. Steps do not exist in isolation, they are part of tasks, and they are executed as running containers with the task's pod. As such, a task's steps may share a volume, that allows them to exchange data.

TaskRun

https://github.com/tektoncd/pipeline/blob/main/docs/taskruns.md

A task run (or taskRun) instantiates a specific task to execute on a particular set of inputs and produce a particular set of outputs, within specific conditions (for example, build flags). A task run connects resources with tasks. A task run can be created via API or by a pipeline run, or by a Tekton components such as Tekton Triggers.

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

TaskRun Operations

Pipeline

https://github.com/tektoncd/pipeline/blob/main/docs/README.md
https://github.com/tektoncd/pipeline/blob/main/docs/pipelines.md

A pipeline defines a series of ordered tasks. Just like steps, a task in a pipeline can use as input the output of a previously executed task. Tekton collects all the tasks, and based on the dependency relationships declared in definition of the pipeline, it orders the tasks in a DAG, and executes the graph in sequence. That results in the materialization of a number of task pods. The pipeline comes up with additional features, such as the capability to fan-out task execution, retry task execution or verify conditions that tasks must meet before proceeding. The pipeline is implemented as a Kubernetes custom resource.

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: task1
spec:
  steps:
    - name: echo
      image: alpine
      script: |
        #!/bin/sh
        echo "this is Task 1 output"
---
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: task2
spec:
  steps:
    - name: echo
      image: alpine
      script: |
        #!/bin/sh
        echo "this is Task 2 output"
---
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: simple-pipeline
spec:
  tasks:
    - name: task1
      taskRef:
        name: task1
    - name: task2
      runAfter:
        - task1
      taskRef:
        name: task2

PipelineRun

https://github.com/tektoncd/pipeline/blob/main/docs/pipelineruns.md

A pipeline run (or pipelineRun) instantiates a specific pipeline to execute on a particular set of inputs and produce a particular set of outputs. A pipeline run connects resources with pipelines.

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: simple-pipeline-run
spec:
  pipelineRef:
    name: simple-pipeline

PipelineRun Operations

Trigger

Implemented as part of the Tekton Triggers component.

Resource

Resources are used to share data between steps and tasks, and depending on which direction they are looked at, the can be input or output resources. Resources are connected to tasks and pipelines by taskRuns and pipelineRuns, respectively. A run must include the actual addresses of resources, such as the URLs of repositories, its task or pipeline needs.

Example of resources:

  • git repository
  • a pull request
  • a container image
  • a Kubernetes cluster
  • storage: an object, a directory, etc.
  • a CloudEvent

Input Resource

The input is defined relative to a step. Examples of input resources are: git repository.

Output Resource

The output is defined relative to a step. Examples of output resources: container image.

Tekton Components

Tekton Pipelines

https://github.com/tektoncd/pipeline/blob/main/docs/README.md

Tekton Pipelines is the component that implements the core functionality of Tekton and sets the foundation for other components. It is implemented as a set of Kubernetes Custom Resources.

Tekton Pipeline Runtime

Tekton Pipelines Controller

Tekton Pipelines Webhook

Tekton Pipeline Operations

Tekton CLI

https://github.com/tektoncd/cli/blob/main/README.md

Tekton CLI provides the command interface called tkn.

Tekton CLI Operations

Tekton API

Tekton APIs are currently available for Pipelines and Triggers allow you to programmatically interact with the Tekton components.

Tekton Catalog

https://github.com/tektoncd/catalog/blob/v1beta1/README.md

Tekton Catalog is a repository of community-contributed Tekton building blocks.

Tekton Hub

https://hub.tekton.dev
https://github.com/tektoncd/hub/blob/main/README.md

Tekton Hub is a web GUI to access Tekton Catalog.

Tekton Triggers

https://github.com/tektoncd/triggers/blob/main/README.md

Tekton Triggers provide triggers, which allow instantiating pipelines based on events (a PR merge, etc.)

Tekton Dashboard

https://github.com/tektoncd/dashboard/blob/main/README.md

Tekton Dashboard is the web GUI that displays information about pipeline execution.

Tekton Operator

https://github.com/tektoncd/operator/blob/main/README.md

Tekton Operator is the implementation of the Kubernetes Operator pattern that assists with the operation of the Tekton projects.

Building Block

Tekton documentation refers to "building blocks". Those are ...