Creating a Pipeline
We will embark on a comprehensive journey through a complete pipeline, with each individual task covered in its tutorial. This approach aims to provide a detailed understanding of each task and how they collectively contribute to the functionality of pipeline-as-code.
In modern software development practices, pipelines play a crucial role in automating and streamlining the process of building, testing, and deploying applications. This tutorial will guide you through creating a pipeline using pipeline-as-code concepts. We'll focus on GitHub as the provider and assume you have a SAAP set up with pipeline-as-code capabilities.
Now that we have completed all the prerequisites to run this pipelineRun
, we can continue by adding a pipeline to our application using pipeline-as-code
approach.
Objectives
- Create a Tekton PipelineRun using a
.tekton/pullrequest.yaml
file from a code repository. - Define parameters, workspaces, and tasks within the PipelineRun for building and deploying your application.
Key Results
- Successfully create and execute the Tekton PipelineRun using the defined
.tekton/pullrequest.yaml
file, enabling automated CI/CD processes for your application.
Tutorial
Create PipelineRun with Git Clone Task
Let's walk you through creating a Tekton PipelineRun
using a Pipeline-as-Code
approach.
- Create a
.tekton
folder at the root of your repository. - Now add a file named
pullrequest.yaml
in this folder and place the below given content in it. This file will represent aPipelineRun
.
# apiVersion: tekton.dev/v1beta1
# kind: PipelineRun
# metadata:
# name: git-clone
# annotations:
# pipelinesascode.tekton.dev/on-event: "[pull_request]"
# pipelinesascode.tekton.dev/on-target-branch: "main"
# pipelinesascode.tekton.dev/task: "[git-clone]"
# pipelinesascode.tekton.dev/max-keep-runs: "2"
# spec:
# params:
# - name: repo_url
# value: {{body.pull_request.head.repo.ssh_url}}
# - name: git_revision
# value: {{revision}}
# pipelineSpec:
# params:
# - name: repo_url
# - name: git_revision
# workspaces:
# - name: source
# - name: ssh-directory
# tasks:
# - name: fetch-repository
# taskRef:
# name: git-clone
# kind: ClusterTask
# workspaces:
# - name: output
# workspace: source
# - name: ssh-directory
# workspace: ssh-directory
# params:
# - name: depth
# value: "0"
# - name: url
# value: $(params.repo_url)
# - name: revision
# value: $(params.git_revision)
# workspaces:
# - name: source
# volumeClaimTemplate:
# spec:
# accessModes:
# - ReadWriteOnce
# resources:
# requests:
# storage: 1Gi
# - name: ssh-directory
# secret:
# secretName: nordmart-api-ssh-creds
-
Provide values for
image_registry
, and helm_registry parameters. You can find the urls from here.image_registry
url should be succeeded by your application name. Example: nexus-docker-stakater-nexus.apps.lab.kubeapp.cloud/review-api -
Now create a pull request on the repository with these changes. This should trigger a pipeline on your cluster.
-
You can go to your tenant's build namespace and see the pipeline running.
Exploring the Git Clone Task
The Git Clone task serves as the initial step in your pipeline, responsible for fetching the source code repository. Let's break down the key components:
-
name: fetch-repository
: This names the task, making it identifiable within the pipeline. -
Task Reference (
taskRef
): The Git Clone task is referred to using the name git-clone, which corresponds to a Task defined in the Tekton Catalog. This task knows how to clone a Git repository. -
Workspaces (
workspaces
): The task interacts with two workspaces;output
andssh-directory
. Theoutput
workspace will store the cloned repository, while thessh-directory
workspace provides SSH authentication. This means that the private key stored in the secretnordmart-ssh-creds
will be utilized during the cloning process. -
Parameters
(params)
:
depth
: Specifies the depth of the Git clone. A value of "0" indicates a full clone.
url
: The URL of the source code repository. This parameter is dynamically fetched from the repo_url parameter defined in the PipelineRun.
revision
: The Git revision to fetch, often corresponding to a specific branch or commit. This parameter is also dynamically fetched from the git_revision
parameter in the PipelineRun.
Great! Let's add more tasks in our pipelineRun in coming tutorials.