Pipelines Automáticas
PipelineRun podem ser ativadas automáticamente por um estímulo, por exemplo um push, merge, pull request, comentário, etc em repositório.
Eventos podem vir de qualquer lugar, não somente em repositório. Falamos repositórios mas poderia ser qualquer coisa. No caso de um repositório é necessário configurar o webhook para que envie o payload do evento para o Tekton.
Podemos criar o que chamamos de listener no Tekton para receber os payloads.
Através de um webhook o tekton recebe o evento e dispara algo que já esteja configurado caso isso aconteça.
Listeners e Triggers
Vamos nos atentar inicialmente aos conceitos
- EventListener é o cara que fica na frente de tudo escutando os eventos.
- TriggerTemplate é a nossa declaração da trigger igual pipeline ou task.
- TriggerBinding são os parâmetros que passamos ao TriggerTemplate poderíamos comparar com o pipelineRun ou taskRun.
Esses controller precisam ser instalados no cluster não vem por default, mas se você fez a instalação com o profile all já deve estar instalado caso contrário é necessário aplicar esses manifestos. Confira na documentação 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 começar declarando um trigger template. Se você observar bem praticamente o que vamos fazer aqui é adicionar uma camada acima do pipelineRun. Poderia ser uma taskRun. Estamos declarando o pipelineRun dentro do trigger template e usando os parâmetros do trigger template no pipelineRun.
Fazendo uma comparação com o que temos nativo no kubernetes. Podemos declarar um pod sozinho e podemos declarar um pod dentro do replicaset, assim como podemos declarar um replicaset com o pod dentro do deployment. Trigger template é um controller para o pipelineRun nesse caso. Geralmente no kubernetes criamos deployments que tem replicaset que tem pod.
No Tekton criamos trigger templates que tem os nossos pipeline runs. Aborta a missão de ficar criando pipeline runs sem trigger template. O que fizemos antes foi para chegar até aqui.
apiVersion: triggers.tekton.dev/v1beta1 # ApiVersion é diferente
kind: TriggerTemplate
metadata:
name: gitlab-pr-trigger-template
spec:
params:
- name: repo-url
- name: revision
default: main
resourcetemplates:
### Bloco do PipelineRun Normal
- apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
generateName: getrepo-run-
# Se você não colocar o namespace será aplicado no current namespace
namespace: default
spec:
params:
## Pegando as variáveis do template ao invés de colocar direto como fazíamos antes
- name: repo-url
value: $(tt.params.repo-url)
- name: revision
value: $(tt.params.revision) ## tt é triggertemplate
pipelineRef:
name: getrepo # Esse será o pipeline que o PipelineRun vai 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 no dashboard, mas não podemos editar por lá.