Cloud costs
March 31, 2020
min read

Tekton vs Harness CD - Filming my Journey


Fresh off the heels of KubeCon 2018 in Seattle, The Continuous Delivery Foundation was formed a little over a year ago in March 2019 which Harness is a member of. The charter projects were familiar projects to myself of Spinnaker and Jenkins/Jenkins X. Though there was another project I have never heard of before which was Tekton and I was very curious to learn more about the project. Using the answer box aka Google, the project was very green and even searching for “Tekton” would not have the project readily available. Even as today, the Tekton website is still being worked on as the project is rounding out a year.

Fast forward to today, the project continues to grow. Though Tekton is appearing to be more of an engine now e.g powering OpenShift Pipelines and even Jenkins X Pipelines. I went through an exercise by using Tekton by itself with a fresh pair of eyes. The goal is similar to other comparisons we made around Spinnaker and Jenkins X if we have an image e.g Nginx, how can we deploy to an awaiting Kubernetes cluster, in my case, Amazon EKS.

The video is about an hour-long where I go through the Tekton Tutorial. The wirings seemed to work together in Tekton; where I drew the line in the sand was creating source-to-image build steps. When looking at Tekton for yourself, I recommend the IBM Tekton Tutorial which does a good job listing out Tekton concepts. I was able to get Nginx deployed from zero to deployed including installing a Harness Delegate into my EKS cluster in about 5 minutes at the end of the video.

The “Tektonic” Video

Without further ado, here is the video. Compared to the other videos a new day didn’t elapse and no need for a change of shirt.


Deploying an image is a good starting point for many people along their journey. Depending on existing development methodologies, moving to a GitOps-based approach can be difficult. Tekton with proper wiring can follow a stringent GitOps model or can wean away once the proper Tekton Objects are generated and in place per pipeline.

Leveraging Tekton there are several objects that you need to create. Familiarizing yourself with a Tekton Task and a Tekton Pipeline, both have Run objects which are needed to execute. Since Tekton leverages Custom Resource Definitions you do need to keep track of these objects.

I chose to run my Kubernetes Cluster in AWS with Amazon EKS. Starting out with the Tekton Setup requires a persistent area in which I was able to spin up quickly in Amazon S3 as I am an administrator on my account. Since I did not leverage source-to-image or other persistent Tekton Pipeline steps, the S3 bucket was never written to.

As Tekton is moving towards being an engine, once you have access to Tekton you have access to what Tekton has access to. I could not find at the time any sort of permissions out of the box from the project which access control is a pillar of the Harness Platform.

Towards the end, I fired up the Harness Platform and was able to get success pretty quickly. 

Harness vs. Tekton

This is thanks in part to the Harness CD Abstraction Model where loading up the moving parts is easy and assembling the pipeline is made rapid off of the parts.

In comparison below is the wiring needed for a basic Tekton Pipeline.

My Tekton Steps

##Tekton Commands

#Install Tekton
kubectl apply --filename

#Monitor Installation
kubectl get pods --namespace tekton-pipelines --watch

#Config Map for S3 - tekton-storage.yaml
apiVersion: v1
kind: Secret
name: tekton-storage
namespace: tekton-pipelines
boto-config: |
aws_access_key_id = Key
aws_secret_access_key = Key
host =
https_validate_certificates = True
apiVersion: v1
kind: ConfigMap
name: config-artifact-bucket
namespace: tekton-pipelines
location: s3://tektonstorage tekton-storage
bucket.service.account.secret.key: boto-config BOTO_CONFIG

#Create Config Map
kubectl apply -f tekton-storage.yaml

#Validate Config Map
kubectl get configmap config-artifact-bucket -n tekton-pipelines -o yaml

#Install the Tekton CLI
brew tap tektoncd/tools
brew install tektoncd/tools/tektoncd-cli

#Validate Tekton CLI
tkn version

#Create a Task - nginx-task.yaml
kind: Task
name: nginx-task
- name: first
image: nginx

#Apply Task
kubectl apply -f nginx-task.yaml

#Describe Task
tkn task describe nginx-task

#Run the Task - nginx-task-run.yaml
kind: TaskRun
name: nginx-task-run
name: nginx-task

#Apply Task Run
kubectl apply -f nginx-task-run.yaml

#Validate Task Run
tkn taskrun describe nginx-task-run
tkn taskrun logs nginx-task-run

#Wrap the task in a pipeline - pipeline.yaml
kind: Pipeline
name: nginx-pipeline
- name: nginx-pipeline-task
name: nginx-task

#Apply Pipeline
kubectl apply -f pipeline.yaml

#Create a Pipeline Run - pipeline-run.yaml
kind: PipelineRun
name: nginx-pipeline-run-1
name: nginx-pipeline

#Apply Pipeline Run
kubectl apply -f pipeline-run.yaml

#Get Pipeline Logs
tkn pipelinerun logs nginx-pipeline-run-1 -f

#Get Pipeline Plan
tkn pipelinerun describe nginx-pipeline-run-1

###Helper Methods
#Create EKS Cluster
eksctl create cluster \
--name The-Tektons \
--version 1.15 \
--region us-east-1 \
--nodegroup-name standard-workers \
--node-type t3.xlarge \
--nodes 4 \
--nodes-min 1 \
--nodes-max 5 \
--node-ami auto

#Delete Cluster
eksctl delete cluster --name=The-Tektons --region=us-east-1

#Add K8s Dashboard
kubectl apply -f

#Add Service Account
kubectl apply -f eks-admin-service-account.yaml

#Get Auth Token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')

#Launch Dashboard
kubectl proxy

The Harness Platform, Your Confidence Engine

The Harness Platform is purpose-built to accept a wide swath of workloads and confidence building steps in a convention-based fashion. The Harness Platform can supercharge your Continuous Delivery goals by allowing many methodologies to be orchestrated by the platform in an easy to consume fashion.

Having the ability to have looked over several tools such as Spinnaker, Argo, and now Tekton, there is a lot of engineering expertise required in these tools. At DeliverConf, a recent talk talked about the need for composition; decomposing your pipeline into exactly what you need when you need it which code-heavy solutions allude to. The difficulty in that is coupling your deployables and infrastructure(s) to have the right components at the right time to execute a deployment. It is very reminiscent of designing the actual piece of software you are deploying; managing features across the journey.

We have taken a different approach with the Harness Platform. We have baked in an easy to consume interface acting as a system of record with convention-based deployments and deployment patterns. Sign up for a Harness Trial today to free yourself from building a platform for your platform.



Sign up now

Sign up for our free plan, start building and deploying with Harness, take your software delivery to the next level.

Get a demo

Sign up for a free 14 day trial and take your software development to the next level


Learn intelligent software delivery at your own pace. Step-by-step tutorials, videos, and reference docs to help you deliver customer happiness.

Case studies

Learn intelligent software delivery at your own pace. Step-by-step tutorials, videos, and reference docs to help you deliver customer happiness.

We want to hear from you

Enjoyed reading this blog post or have questions or feedback?
Share your thoughts by creating a new topic in the Harness community forum.

Sign up for our monthly newsletter

Subscribe to our newsletter to receive the latest Harness content in your inbox every month.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Continuous Delivery & GitOps