We want to use the official Tekton buildpacks task from Tekton Hub to run our builds using Cloud Native Buildpacks. The buildpacks documentation for Tekton tells us to install the buildpacks
& git-clone
Task from Tekton Hub, create Secret
, ServiceAccount
, PersistentVolumeClaim
and a Tekton Pipeline
.
As the configuration is parameterized, we don't want to start our Tekton pipelines using a huge kubectl command but instead configure the PipelineRun
using a separate pipeline-run.yml
YAML file (as also stated in the docs) containing the references to the ServiceAccount
, workspaces, image name and so on:
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
name: buildpacks-test-pipeline-run
spec:
serviceAccountName: buildpacks-service-account # Only needed if you set up authorization
pipelineRef:
name: buildpacks-test-pipeline
workspaces:
- name: source-workspace
subPath: source
persistentVolumeClaim:
claimName: buildpacks-source-pvc
- name: cache-workspace
subPath: cache
persistentVolumeClaim:
claimName: buildpacks-source-pvc
params:
- name: image
value: <REGISTRY/IMAGE NAME, eg gcr.io/test/image > # This defines the name of output image
Now running the Tekton pipeline once is no problem using kubectl apply -f pipeline-run.yml
. But how can we restart or reuse this YAML-based configuration for all the other pipelines runs?
CodePudding user response:
There are some discussions about that topic in the Tekton GitHub project - see tektoncd/pipeline/issues/664 and tektoncd/pipeline/issues/685. Since Tekton is heavily based on Kubernetes, all Tekton objects are Kubernetes CRDs - which are in fact immutable. So it is intended to not be able to re-run an already run PipelineRun
.
But as also discussed in tektoncd/pipeline/issues/685 we can simply use the generateName
variable of the metadata
field like this:
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
generateName: buildpacks-test-pipeline-run-
spec:
serviceAccountName: buildpacks-service-account # Only needed if you set up authorization
pipelineRef:
name: buildpacks-test-pipeline
workspaces:
- name: source-workspace
subPath: source
persistentVolumeClaim:
claimName: buildpacks-source-pvc
- name: cache-workspace
subPath: cache
persistentVolumeClaim:
claimName: buildpacks-source-pvc
params:
- name: image
value: <REGISTRY/IMAGE NAME, eg gcr.io/test/image > # This defines the name of output image
Running kubectl create -f pipeline-run.yml
will now work multiple times and kind of "restart" our Pipeline, while creating a new PipelineRun
object like buildpacks-test-pipeline-run-dxcq6
everytime the command is issued.
Keep in mind to delete old PipelineRun
objects once in a while though.
CodePudding user response:
You cannot restart a pipelinerun
.
Since in tekton, a pipelinerun
is one time execution for a pipeline
(treat as template), so it should not able to be restart, another kubectl apply
for pipelinerun
is another execution...