The introduction of Kubernetes (Tekton) Pipelines has made a revolution in the way we handle CI/CD workflows in software development. The addition of Tekton, the Kubernetes-native framework, has given us more power and flexibility in creating and managing pipelines. This article focuses on the importance of Kubernetes Pipelines and Tekton on Red Hat OpenShift, and how these tools can help you make your development process truly continuous.
What is a Pipeline?
A pipeline is an automated process that drives software through the building, testing, and deploying stages of the software development lifecycle. In other words, a pipeline executes the Continuous Integration and Continuous Delivery (CI/CD) workflow. It automatically handles the tasks of running the test suite, analyzing code, creating binaries, containerization, and deploying changes to the cloud or on-premise solutions.
Why Should You Build Pipelines with Kubernetes?
As the development world moves to embrace microservices-based applications ahead of monolithic applications, the CI/CD process has become truly continuous with incremental updates to the codebase that are independently deployable.
In such a setting, Kubernetes simplifies the process of creating and maintaining CI/CD pipelines. It deploys each microservice to a single Kubernetes cluster and maintains several copies of each microservice to serve as dev, test, and prod versions.
With Kubernetes pipelines, you no longer have to rebuild the entire application during each build. Instead, Kubernetes updates the container of the microservice and deploys it through the defined pipeline. There’s no need for writing build scripts anymore as Kubernetes automatically handles the process with only a few configuration options we provide. This reduces the chance for human errors in the CI/CD workflow.
What is Tekton?
Tekton allows you to take Kubernetes pipelines to the next level. It’s an open-source, Kubernetes-native framework for developing CI/CD pipelines. Tekton provides extensions to Custom Resource Definitions (CRDs) in Kubernetes to make it easier to create and standardize pipelines. It has in-built support for coupling with existing CI/CD tools in the industry such as Jenkins, Jenkins X, Skaffold, Knative, and OpenShift.
The OpenShift integration of Tekton, named OpenShift Pipelines, introduces even more power and flexibility to this system through RedHat and OpenShift developer tools.
Why Should You Use Tekton?
Tekton pipelines use Kubernetes clusters as a first-class type and containers as their primary building blocks. The decoupled nature of Tekton ensures that you can use a single pipeline to deploy to separate Kubernetes clusters. This makes it easier to deploy services across multiple cloud solutions supplied by different vendors or even across on-premise systems.
Tekton allows you to run the automated tasks in isolation, without being affected by other processes running in the same system. Another specialty of Tekton is the flexibility it provides to switch resources, such as GitHub repositories, in between pipeline runs.
It also facilitates switching pipeline implementation depending on the type of resource. For example, you can set up a unique implementation to handle images.
Tekton coupled with OpenShift ensures high availability of the system by allowing each unit to independently scale on-demand. And you get improved logging/monitoring tools and fast self-recovery features in-built to Kubernetes.
How Does Tekton Work?
Tekton provides Kubernetes-style CRDs for declaring CI/CD pipelines. The resources are declared in a yaml which is, usually, stored with the code repository. We will consider the basic CRDs that are essential when creating pipelines.
A Task is the smallest configurable unit in a Tekton pipeline. It’s similar to a function that accepts a set of inputs and outputs certain results. Each task can either run individually and independently or as a part of the pipeline. A command executed by a Task is called a Step. Each task consists of one or more Steps. Tekton executes each Task in its own Kubernetes pod.
A Pipeline consists of a number of Tasks that form the final automated CI/CD workflow. In addition to Tasks, it also contains PipelineResources. They are provided as inputs and outputs to Pipeline Tasks.
A PipelineResource is an object that is used as an input or an output to a Task. For example, if the Task accepts a GitHub repository as input and builds and outputs the related Docker image, both of them are declared as PipelineResource objects.
A PipelineRun is an instance of a Pipeline that is being executed. It initiates the execution of the Pipeline and manages the PipelineResources passed to Tasks as inputs and outputs.
A TaskRun is a running instance of a Task. PipelineRun creates TaskRun objects for each Task in the Pipeline to initiate the execution.
A Trigger is an external event that triggers the CI/CD workflow. For example, a Git pull request could act as a Trigger. The information passed with the event payload is then used to trigger the Tasks in the Pipeline.
Conditions are similar to if statements in regular programming. They perform a validation check against provided conditions and return a True or False value. The Pipeline checks these Conditions before running a Task. If the Condition returns True, the Task is run, and if it returns False, the Task is skipped.
With these components, you can create complex, fully automated pipelines to build, test, and deploy your applications to the cloud or on-premise solutions.
Who Should Use Tekton?
Platform engineers who build CI/CD workflows for developers in an organization would find Tekton an ideal framework to make this process simpler. Developers too can build CI/CD workflows with Tekton for software and application development projects. This gives them the ability to easily manage different stages of the development process, such as dev, test, prod versions of the product, with minimal human interference.