---
title: "Using Tekton Kubernetes Framework in Building CI/CD"
description: "Learn how to build CI/CD systems efficiently with the open-source Tekton Kubernetes framework in this ATA Learning tutorial!"
canonical: "https://adamtheautomator.com/tekton-kubernetes/"
---

# Using Tekton Kubernetes Framework in Building CI/CD

> Learn how to build CI/CD systems efficiently with the open-source Tekton Kubernetes framework in this ATA Learning tutorial!

Source: https://adamtheautomator.com/tekton-kubernetes/

---

ATA Learning

Tap to hide

[

ATA Learning

](/)

*   [Home](/)
*   [Tutorials](/tutorials/)
*   [Instructors](/author/)
*   [Advertising](/advertising/)
*   [Recommended Resources](/resources/)
*   [About Adam](/about-adam/)

Search for:  

*   [](https://twitter.com/adbertram)
*   [](https://github.com/Adam-the-Automator)
*   [](https://www.linkedin.com/company/adam-the-automator-llc)
*   [](/feed/)

![Using Tekton Kubernetes Framework in Building CI/CD](https://adamtheautomator.com/wp-content/uploads/2022/11/tekton-kubernetes.jpg)

# Using Tekton Kubernetes Framework in Building CI/CD

[![](https://secure.gravatar.com/avatar/b1faae2f957a0d43de36dfd25e8c08537718fb87c49cfd0a15b0e860a7f7b9a0?s=192&d=mm&r=g)Mercy Bassey](https://adamtheautomator.com/author/mercy-bassey/)29 November 202210 min. read

Categories: [DevOps](/category/devops/)

Tags:[Kubernetes](/tag/kubernetes/)

Table of Contents

*   [Prerequisites](#prerequisites)
*   [Installing Tekton Pipelines](#installing-tekton-pipelines)
*   [Creating a Tekton Task](#creating-a-tekton-task)
*   [Executing Tasks with Tekton Within Kubernetes Cluster](#executing-tasks-with-tekton-within-kubernetes-cluster)
*   [Creating a Secret and a ServiceAccount](#creating-a-secret-and-a-serviceaccount)
*   [Providing Kubernetes Cluster Access to the Service Account](#providing-kubernetes-cluster-access-to-the-service-account)
*   [Creating a Pipeline to Streamline Tasks](#creating-a-pipeline-to-streamline-tasks)
*   [Instantiating the Pipeline](#instantiating-the-pipeline)
*   [Accessing the Application](#accessing-the-application)
*   [Conclusion](#conclusion)

Have you been thinking of how you can automate orchestration processes and workflows in Kubernetes? If yes, with Tekton Kubernetes, you are in for a treat! [Tekton](https://tekton.dev/) is a powerful Kubernetes native software that lets you create Continuous Integration and Continuous Delivery (CI/CD) systems.

In this tutorial, you will learn how Tekton provides flexibility to build, test, and deploy any application across multiple cloud providers.

Read on and spin up your automation skills with Tekton!

## Prerequisites

This tutorial will be a hands-on demonstration. To follow along, ensure you have the following:

*   A Kubernetes cluster that supports a service type of _**LoadBalancer**_ already running – This tutorial uses a cloud-based Kubernetes cluster.

Related:[Jumpstart Kubernetes Locally with this MiniKube Tutorial](https://adamtheautomator.com/minikube-tutorial/)

*   A GitHub repository – This tutorial uses a GitHub repository called _**tekton-nodejs-app.**_
    
*   A Docker Hub repository – This tutorial uses a repository name _**node-app.**_
    
*   A computer with [Tekton Pipelines CLI](https://github.com/tektoncd/cli#installing-tkn) installed – This tutorial uses an Ubuntu 20.04LTS distribution.
    

## Installing Tekton Pipelines

When defining the Kubernetes custom resources needed to run your [CI/CD](https://adamtheautomator.com/circleci-docker-images/) pipeline, you will need to have [Tekton Pipelines](https://tekton.dev/docs/pipelines/) installed in your Kubernetes cluster. Tekton Pipelines is the main building block of Tekton.

Related:[How to Create a CI/CD Pipeline for CircleCI Docker Images](https://adamtheautomator.com/circleci-docker-images/)

1\. Run the [kubectl apply](https://jamesdefabia.github.io/docs/user-guide/kubectl/kubectl_apply/) command below to install Tekton Pipelines.

```yaml
kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
```

Once installed, you will see an output similar to the one below.

![Installing Tekton Pipelines](https://adamtheautomator.com/wp-content/uploads/2022/11/image-417.png)

Installing Tekton Pipelines

2\. Next, run the below [kubectl get](https://jamesdefabia.github.io/docs/user-guide/kubectl/kubectl_get/) command below to list all pods and monitor (–watch) the installation.![watch-pods.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a7b28d4f-c345-4572-87ca-d391d3475165/watch-pods.png)

```yaml
kubectl get pods -n tekton-pipelines --watch
```

If the pods below are Ready (1/1), and Running, as shown below, you are ready to work with Tekton.

*   **tekton-pipelines-controller**
*   **tekton-pipelines-webhook**

![tekton-pipelines-webhook ](https://adamtheautomator.com/wp-content/uploads/2022/11/image-418.png)

tekton-pipelines-webhook

3\. Now, press Ctrl+C to stop watching so you can start creating your first task in the following sections.

## Creating a Tekton Task

Now that you have Tekton Pipelines installed, it is time to see Tekton in action by creating tasks. Tekton tasks let you automatically launch specific build or delivery tools with a series of specified steps.

Related:[Automate Tasks With Terraform Docker Integration](https://adamtheautomator.com/terraform-docker/)

In this tutorial, you will create tasks with Tekton, from printing a simple text, and advance to more complex stuff later on.

1\. Create a file _first-task.yaml_ in your preferred code editor, and add the following code.

The code below creates a task that prints (echo) the Hello World text.

```yaml
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: say-hello # Sets the name of the task
spec:
  steps:
    - name: echo-hello # Sets the name of the step
      image: alpine # Sets the image this step uses
      script: |
        #!/bin/sh
        echo "Hello World" # The script/command this step executes
```

2\. Now, run the below command to apply this task (first-task.yaml) to your Kubernetes cluster.

```yaml
kubectl apply -f first-task.yaml
```

![Kubernetes cluster](https://adamtheautomator.com/wp-content/uploads/2022/11/image-419.png)

Kubernetes cluster

3\. Edit the _first-task.yaml_ file and modify the existing code with the one below.

```yaml
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: say-hello # Sets the name of the task
spec:
  params:
    - name: sayHello
      type: string
      default: "Hello World"
      description: greets
  steps:
    - name: echo-hello # Sets the name of the step
      image: alpine # Sets the image this step uses
      command: ["echo"] # The command this step uses
      args: ["$(params.sayHello)"] # The arguments this step executes
```

4\. Lastly, run the command below to apply the modified task to your cluster.

```bash
kubectl apply -f first-task.yaml
```

This time, the output shows that the task has been configured.

![task has been configured](https://adamtheautomator.com/wp-content/uploads/2022/11/image-420.png)

task has been configured

## Executing Tasks with Tekton Within Kubernetes Cluster

You have successfully created and applied tasks in your Kubernetes cluster. But these tasks are just sitting unless you execute them.

To instantiate your first task with Tekton, you must create a `TaskRun`.

1\. Create a file called _first-task-run.yaml_ and populate the below code.

This code specifies the name of the TaskRun (first-task-run) and the name of the task to run (say-hello).

```bash
apiVersion: tekton.dev/v1beta1
kind: TaskRun 
metadata:
  name: first-task-run # The name of the TaskRun
spec:
  taskRef:
    name: say-hello # The name of the task this TaskRun should reference to
```

2\. Next, run the below command to apply your TaskRun (first-task-run.yaml).

```bash
kubectl apply -f first-task-run.yaml
```

The output below indicates that the (TaskRun) has been created.

![Creating the TaskRun](https://adamtheautomator.com/wp-content/uploads/2022/11/image-421.png)

Creating the TaskRun

3\. Once the TaskRun is created, run the command below to get all TaskRun.

```bash
kubectl get taskrun
```

![Getting all available TaskRun](https://adamtheautomator.com/wp-content/uploads/2022/11/image-422.png)

Getting all available TaskRun

4\. Now, run the following [kubectl logs](https://www.sumologic.com/blog/kubectl-logs/) command to see if the specified tasks provide the expected output.

```bash
kubectl logs --selector=tekton.dev/taskRun=first-task-run
```

The output below confirms that you successfully ran your first task, which prints the Hello World text.

![Verifying Kubernetes logs](https://adamtheautomator.com/wp-content/uploads/2022/11/image-423.png)

Verifying Kubernetes logs

5\. Finally, run each tkn command below to check the lists of ([task](https://docs.openshift.com/container-platform/4.7/cli_reference/tkn_cli/op-tkn-reference.html#op-tkn-task-management_op-tkn-reference)) and ([taskrun](https://docs.openshift.com/container-platform/4.7/cli_reference/tkn_cli/op-tkn-reference.html#op-tkn-task-run_op-tkn-reference)) in your Kubernetes cluster using the Tekton CLI.

```bash
tkn task ls # Outputs tasks
tkn taskrun ls # Outputs taskruns
```

If successful, you will see the following output confirming the TaskRun has Succeeded.

![Checking the list of executed tasks and TaskRuns ](https://adamtheautomator.com/wp-content/uploads/2022/11/image-424.png)

Checking the list of executed tasks and TaskRuns

## Creating a Secret and a ServiceAccount

Since you already know the basics of creating tasks and how Tekton works, you are ready to try advanced stuff with Tekton.

You will create a CI/CD pipeline that pulls a source code from a GitHub repository, run some tasks, build a Docker image, push the source to a public Docker repository and deploy to your Kubernetes cluster.

Related:[How to Keep Kubernetes Secrets Safe](https://adamtheautomator.com/kubernetes-secrets/)

Since you will push to a public Docker registry, you must set up the following:

*   Secret – Stores confidential credentials for Docker Hub (username and password).
*   Service account – Grants access to your secret.

To create a secret and a service account:

1\. Create a _docker-secret.yaml_ file in your preferred code editor, and add the code below.

The following code lets you declare your Docker Hub credentials as secret. Ensure you replace <USERNAME> and <PASSWORD> with your Docker Hub credentials.

```yaml
apiVersion: v1
kind: Secret
metadata:
  name: dockerhub-user # The name of the secret
  annotations: 
    tekton.dev/docker-0: https://index.docker.io
type: kubernetes.io/basic-auth
stringData:
  username: "<USERNAME>" # Your DockerHub username goes here
  password: "<PASSWORD>" # Your DockerHub password goes here
```

2\. Next, run the below kubectl apply command to apply your secret (docker-secret.yaml) in your Kubernetes cluster:

```bash
kubectl apply -f docker-secret.yaml
```

![Creating the secret](https://adamtheautomator.com/wp-content/uploads/2022/11/image-425.png)

Creating the secret

3\. Once applied, create a new file called _service-account.yaml_ and populate the code below, which creates your service account.

```yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tkn-sa # The name of the service account
secrets:
  - name: dockerhub-user # The name of the secret this service account will  use
```

4\. Lastly, run the following command to apply this service account (service-account.yaml) in your Kubernetes cluster.

```bash
kubectl apply -f service-account.yaml
```

![Creating the service account](https://adamtheautomator.com/wp-content/uploads/2022/11/image-426.png)

Creating the service account

## Providing Kubernetes Cluster Access to the Service Account

You have created your service account, but your Kubernetes cluster still needs access to that service account (tkn-sa) to apply Tekton resources successfully. How? You will create a Role and a RoleBinding to the service account.

1\. Create a file called _role.yaml_ and add the following configuration settings.

The code below will create a role (nodejs-pipeline-role) with the ability to manage some of your Kubernetes cluster resources. In addition, the code creates a role-binding (nodejs-pipeline-role-binding) that binds the role to the service account (tkn-sa).

```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: nodejs-pipeline-role # The name of the role
rules:
- apiGroups: ["extensions", "apps", ""]
  resources: ["services", "deployments", "pods","pvc","job"]
  verbs: ["get", "create", "update", "patch", "list", "delete"]
---

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: nodejs-pipeline-role-binding # The name of the role binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: nodejs-pipeline-role # The role this role-binding will use
subjects:
- kind: ServiceAccount 
  name: tkn-sa # The service account this role-binding gives access to
```

2\. Next, run the command below to apply the Role and RoleBinding (_role.yaml_) to your Kubernetes cluster.

```bash
kubectl apply -f role.yaml
```

![Applying the Role and RoleBinding](https://adamtheautomator.com/wp-content/uploads/2022/11/image-427.png)

Applying the Role and RoleBinding

3\. Now, run each command below to get the role and rolebinding for your Kubernetes cluster.

```bash
kubectl get role # Get role
kubectl get rolebinding # Get role binding
```

The output below confirms your Role and RoleBinding are ready.

![Verifying the Role and RoleBinding](https://adamtheautomator.com/wp-content/uploads/2022/11/image-428.png)

Verifying the Role and RoleBinding

## Creating a Pipeline to Streamline Tasks

Now that you have a _**role**_ and **rolebinding** ready, you can streamline your workflow tasks by creating your pipeline.

This pipeline will contain three tasks:

*   First task – Clones a GitHub repository.
*   Second task – Builds a Docker image for the source code in your GitHub repository.
*   Third task – Deploys the Docker image to your Kubernetes cluster.

To create your pipeline, you must first install the required tasks:

1\. Run each command below to install the following tasks from [TektonHub](https://hub.tekton.dev/?query=git-clone):

> _Tasks on [Tekton Hub](https://hub.tekton.dev/) are reusable tasks that you can install and customize to suit your needs or use in your pipeline._

<table><tbody><tr><td><strong>Task</strong></td><td><strong>Function</strong></td></tr><tr><td>git-clone</td><td>This task will clone a GitHub repository and be referenced later in your pipeline.</td></tr><tr><td>buildah</td><td>This task is responsible for building the container image for your GitHub repository and push to a Docker Hub repository.</td></tr><tr><td>kubernetes-actions</td><td>This task pulls the container image from Docker Hub and deploys it to your Kubernetes cluster. Also, this task executes any other Kubernetes command you specify in your pipeline.</td></tr></tbody></table>

```bash
# Install tasks (get-clone, buildah, kubernetes-actions)
tkn hub install task git-clone
tkn hub install task buildah
tkn hub install task kubernetes-actions
```

![Installing the git-clone task](https://adamtheautomator.com/wp-content/uploads/2022/11/image-429.png)

Installing the git-clone task

![Installing the buildah task](https://adamtheautomator.com/wp-content/uploads/2022/11/image-430.png)

Installing the buildah task

![Installing the kubernetes-action task](https://adamtheautomator.com/wp-content/uploads/2022/11/image-431.png)

Installing the kubernetes-action task

2\. Next, run the command below to list (ls) all available tasks.

```bash
tkn tasks ls
```

With the output below, you can see and verify four tasks created and ready in your Kubernetes cluster; three from Tekton Hub, and one is your Tekton task.

![Listing all available tasks](https://adamtheautomator.com/wp-content/uploads/2022/11/image-432.png)

Listing all available tasks

3\. After verifying the tasks, run the git clone command below to clone a NodeJS application from [GitHub](https://github.com/mercybassey/tekton-nodejs-app) (tekton-nodejs-app.git).

This GitHub repository contains the following:

*   A _Dockerfile_ that buildah will use to build the container image.
*   A _manifest_/_deployment.yaml_ file that _kubernetes-actions_ will use to deploy the NodeJS application.

```yaml
git clone https://gitlab.com/mercybassey683/tekton-nodejs-app.git
```

![Cloning NodeJS application from GitHub](https://adamtheautomator.com/wp-content/uploads/2022/11/image-433.png)

Cloning NodeJS application from GitHub

> _If you wish to clone your source code from your source control platform, ensure you have a Dockerfile and a deployment.yaml file created in your application._

4\. Now, edit the _manifest/deployment.yaml_ file to contain your Docker Hub username and app name. Doing so tells Tekton to deploy the container image to your own Docker Hub repository.

5\. Create a file called _pipeline.yaml_ and add the following configuration settings.

The code below creates a pipeline called nodejs-pipeline. This pipeline will run all installed tasks sequentially using a shared workspace called node-workspace.

Replace the corresponding values below:

*   DOCKERHUB\_REPO – The path to your Docker Hub repository. This tutorial uses _https://hub.docker.com/repository/docker/mercybassey/node-app_.
*   GITHUB\_REPO – The path to your GitHub repository. This tutorial uses _https://github.com/mercybassey/tekton-nodejs-app_
*   DEPLOYMENT\_FILE – The path to your deployment.yaml file. This tutorial uses _https://raw.githubusercontent.com/mercybassey/tekton-nodejs-app/main/manifest/deployment.yaml_.

```yaml
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: nodejs-pipeline # The name of the pipeline
spec:
  params:
    - name: IMAGE
      description: Image description
      type: string
      default: "DOCKERHUB_REPO"
    - name: TAG
      description: Preferred tag
      default: latest
  workspaces:
    - name: node-workspace
  tasks:
    - name: fetch-repository # The name of the first task
      taskRef:
        name: git-clone # The task this pipeline should run first (git-clone task)
      workspaces:
        - name: output
          workspace: node-workspace
      params:
        - name: url
          value: GITHUB_REPO # The GitHub repository
        - name: subdirectory
          value: ""
        - name: deleteExisting
          value: "true"
    - name: build-push-image # The name of the second task
      taskRef:
        name: buildah # The task second task this pipeline should run
      runAfter:
        - fetch-repository # Indicates this task should run after the "first-repository" task
      workspaces:
        - name: source
          workspace: node-workspace
      params:
        - name: IMAGE
          value: "$(params.IMAGE):$(params.TAG)" # The Docker image and the tag
        - name: CONTEXT
          value: "source" # The path or directory that contains the Dockerfile
        - name: FORMAT
          value: "docker"
    - name: create-deployment # The name of the third and final task
      taskRef:
        name: kubernetes-actions # The name of the task this pipeline should use
      runAfter:
        - build-push-image
			workspaces:
				- name: manifest-dir
					workspace: node-workspace
      params:
        - name: script
          value: |
            kubectl apply -f DEPLOYMENT_FILE
```

6\. Lastly, run the command below to apply this pipeline configuration setting in your Kubernetes cluster.

```yaml
kubectl apply -f pipeline.yaml
```

If created successfully, you should have the following output.

![Creating the pipeline](https://adamtheautomator.com/wp-content/uploads/2022/11/image-434.png)

Creating the pipeline

## Instantiating the Pipeline

Creating a pipeline would be for naught unless you put it to work. But first, you will have to configure a [PipelineRun](https://tekton.dev/docs/pipelines/pipelineruns/). This PipelineRun will instantiate and execute a [pipeline](https://tekton.dev/docs/pipelines/pipelines/) on your Kubernetes cluster.

To configure your PipelineRun:

1\. Run the command below to list (ls) available pipelines.

```javascript
tkn pipeline ls
```

The output below shows that you have a pipeline created but not running.

![Listing pipelines](https://adamtheautomator.com/wp-content/uploads/2022/11/image-435.png)

Listing pipelines

2\. Next, create a file called _pipeline-run.yaml_ and add the code below.

The configuration settings below create a PipelineRun (nodejs-pipelinerun) that executes your pipeline (nodejs-pipeline) using the service account (tkn-sa).

```yaml
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
 name: nodejs-pipelinerun # The name of the pipeline.
spec:
  serviceAccountName: tkn-sa # The service account to access your DockerHub account.
  pipelineRef:
    name: nodejs-pipeline # References the pipeline used in this PipelineRun.
  podTemplate:
    securityContext:
      fsGroup: 65532 # non-root UID 65532, which allows the git-clone task command.
  params:
    - name: IMAGE 
      value: mercybassey/node-app # The image name as a parameter in nodejs-pipeline.
    - name: TAG
      value: latest
  workspaces:
    - name: node-workspace # The workspace used in the pipeline
      volumeClaimTemplate:
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 25Gi # Amount of storage used 
```

3\. Now, run the command below to apply and create your PipelineRun (_pipeline-run.yaml_).

```yaml
kubectl apply -f pipeline-run.yaml
```

![Creating the PipelineRun](https://adamtheautomator.com/wp-content/uploads/2022/11/image-436.png)

Creating the PipelineRun

4\. Once created, run the below command to list (ls) all PipelineRuns.

```bash
tkn pipelinerun ls
```

Below, you can see your PipelineRun (nodejs-pipelinerun) is Running.

![Listing all PipelineRuns](https://adamtheautomator.com/wp-content/uploads/2022/11/image-437.png)

Listing all PipelineRuns

5\. Run below [tkn pipelinerun](https://docs.openshift.com/container-platform/4.7/cli_reference/tkn_cli/op-tkn-reference.html#op-tkn-pipeline-run_op-tkn-reference) command to view the logs of your PipelineRun.

```bash
tkn pipelinerun logs nodejs-pipelinerun
```

The output below shows your PipelineRun is still running.

![Viewing the PipelineRun logs](https://adamtheautomator.com/wp-content/uploads/2022/11/image-438.png)

Viewing the PipelineRun logs

6\. Once the PipelineRun stops running, rerun the below command to list all pipelines.

```powershell
tkn pipeline ls
```

Below, you can see the status changes to Succeeded, which verifies you have everything configured correctly.

![Verifying the PipelineRun is successful](https://adamtheautomator.com/wp-content/uploads/2022/11/image-439.png)

Verifying the PipelineRun is successful

7\. Now, head over to your Docker Hub repository to confirm your image was pushed successfully, as shown below.

![Verifying the image was pushed successfully to the Docker Hub repository](https://adamtheautomator.com/wp-content/uploads/2022/11/image-440.png)

Verifying the image was pushed successfully to the Docker Hub repository

8\. Finally, run the commands below to see your deployment and service in your cluster.

```bash
kubectl get deployment
kubectl get service
```

The output below shows your application has been deployed with three replicas and exposed as a service of type LoadBalancer_._

![Verifying application deployment and service](https://adamtheautomator.com/wp-content/uploads/2022/11/image-441.png)

Verifying application deployment and service

## Accessing the Application

You have seen Tekton deploying your application to your Kubernetes cluster. But how do you access your application?

Run the command below, which does not provide output, but retrieves and stores your load balancer IP address to the `LB_IP` variable.

```bash
export LB_IP=$(kubectl get svc/nodejs-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
```

Now, execute the `curl` command below to access your application.

```bash
curl ${LB_IP} -w "\\n"
```

If successful, you will get the following message as you specified in your Tekton task (**first-task.yaml**).

![Tekton task (first-task.yaml).](https://adamtheautomator.com/wp-content/uploads/2022/11/image-442.png)

Tekton task (_first-task.yaml_).

## Conclusion

In this tutorial, you have learned how to integrate a CI/CD workflow with Tekton. And at this point, you can confidently create Tekton tasks and a pipeline to streamline your workflow via the Tekton CLI.

But how else will you like to use Tekton? Maybe clone a GitLab repository and use a Docker build task for Tekton Hub? Or perhaps build the container image, push it to a Docker Hub repository, and deploy it to a Kubernetes cluster?

Share this article

[Share on X](https://twitter.com/intent/tweet?url=https%3A%2F%2Fadamtheautomator.com%2Ftekton-kubernetes%2F&text=Using%20Tekton%20Kubernetes%20Framework%20in%20Building%20CI%2FCD)[Share on Facebook](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fadamtheautomator.com%2Ftekton-kubernetes%2F)[Share on LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fadamtheautomator.com%2Ftekton-kubernetes%2F)

## Related Posts

![](https://adamtheautomator.com/wp-content/uploads/2026/07/featured_image-3.png)

### [Build Your First Internal Developer Platform](/build-first-internal-developer-platform/)

Build your first Internal Developer Platform with Backstage, a software catalog, software templates, CI/CD handoffs, and Kubernetes deployment manifests.

![](https://adamtheautomator.com/wp-content/uploads/2026/06/featured_image-9.png)

### [DevOps to Platform Engineer: 2026 Transition Roadmap](/devops-platform-engineer-2026-transition-roadmap/)

Learn how to move from DevOps to platform engineering in 2026 with a practical roadmap covering transferable skills, internal developer platforms, Backstage, Crossplane, and portfolio projects.

![](https://adamtheautomator.com/wp-content/uploads/2024/02/kubernetes-blue-green.jpg)

### [Learning the Kubernetes Blue Green Deployment Strategy](/kubernetes-blue-green/)

Dive into Kubernetes blue-green deployments for smooth updates. Enhance your release process with this smart Kubernetes strategy!

## Categories

*   [IT Ops](/category/it-ops/)
*   [Cloud](/category/cloud/)
*   [DevOps](/category/devops/)
*   [Home Ops](/category/home-ops/)
*   [Information Security](/category/infosec/)
*   [Software Development](/category/software-development/)

## Site

*   [Home](/)
*   [Tutorials](/tutorials/)
*   [Instructors](/author/)
*   [Advertising](/advertising/)
*   [Recommended Resources](/resources/)
*   [About Adam](/about-adam/)

Copyright 2026© ATA Learning | [Privacy Policy](/privacy/)
