Pipelines Automáticos
Los PipelineRuns pueden activarse automáticamente por un estímulo, por ejemplo un push, merge, pull request, comentario, etc. en un repositorio.
Los eventos pueden venir de cualquier lugar, no solo de repositorios. Hablamos de repositorios pero podría ser cualquier cosa. En el caso de un repositorio es necesario configurar el webhook para que envíe el payload del evento a Tekton.
Podemos crear lo que llamamos un listener en Tekton para recibir los payloads.
A través de un webhook Tekton recibe el evento y dispara algo que ya esté configurado si esto ocurre.
Listeners y Triggers
Vamos a prestar atención inicialmente a los conceptos
- EventListener es el que está al frente de todo escuchando los eventos.
- TriggerTemplate es nuestra declaración del trigger como pipeline o task.
- TriggerBinding son los parámetros que pasamos al TriggerTemplate podríamos compararlo con el pipelineRun o taskRun.
Estos controladores necesitan ser instalados en el clúster, no vienen por defecto, pero si hiciste la instalación con el profile all ya debería estar instalado, de lo contrario es necesario aplicar estos manifiestos. Comprueba en la documentación oficial.
kubectl apply --filename \
https://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml
kubectl apply --filename \
https://storage.googleapis.com/tekton-releases/triggers/latest/interceptors.yaml
Vamos a empezar declarando un trigger template. Si observas bien prácticamente lo que vamos a hacer aquí es añadir una capa por encima del pipelineRun. Podría ser un taskRun. Estamos declarando el pipelineRun dentro del trigger template y usando los parámetros del trigger template en el pipelineRun.
Haciendo una comparación con lo que tenemos nativo en Kubernetes. Podemos declarar un pod solo y podemos declarar un pod dentro del replicaset, así como podemos declarar un replicaset con el pod dentro del deployment. Trigger template es un controlador para el pipelineRun en este caso. Generalmente en Kubernetes creamos deployments que tienen replicaset que tienen pod.
En Tekton creamos trigger templates que tienen nuestros pipeline runs. Aborta la misión de estar creando pipeline runs sin trigger template. Lo que hicimos antes fue para llegar hasta aquí.
apiVersion: triggers.tekton.dev/v1beta1 # ApiVersion es diferente
kind: TriggerTemplate
metadata:
name: gitlab-pr-trigger-template
spec:
params:
- name: repo-url
- name: revision
default: main
resourcetemplates:
### Bloque del PipelineRun Normal
- apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
generateName: getrepo-run-
# Si no pones el namespace se aplicará en el namespace actual
namespace: default
spec:
params:
## Cogiendo las variables del template en lugar de ponerlo directo como hacíamos antes
- name: repo-url
value: $(tt.params.repo-url)
- name: revision
value: $(tt.params.revision) ## tt es triggertemplate
pipelineRef:
name: getrepo # Este será el pipeline que el PipelineRun va a usar
taskRunTemplate:
serviceAccountName: default
timeouts:
pipeline: 1h0m0s
workspaces:
- name: shared-workspace
volumeClaimTemplate:
metadata:
creationTimestamp: null
name: shared-data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
kubectl apply -f tt.yaml
triggertemplate.triggers.tekton.dev/gitlab-pr-trigger-template created
k get triggertemplate
NAME AGE
gitlab-pr-trigger-template 30s
tkn triggertemplate list
NAME AGE
gitlab-pr-trigger-template 42 seconds ago
Podemos ver en el dashboard, pero no podemos editar ahí.

