Pipelines com o Tekton - Introdução
Características
É um projeto Open Source mantido pela CNCF
Todas os elementos são objetos do Kubernetes
É focado em reutilização(
TriggerBinding
,TriggerTemplate
,Pipeline
,Task
)Seu funcionamento se dá pela implementação de `CRD`s(Custom Resource Definition) customizados para cada um dos elementos descritos posteriormente.
Ecossistema
Tekton Triggers - Pacote com os
CRDs
referentes a escuta de eventos e como respondê-los;[Tekton Pipelines](https://tekton.dev/docs/pipelines/) - Pacote com os
CRDs
referentes a construção de tasks, recursos e elementos referentes a pipeline;[Tekton Dashboard](https://tekton.dev/docs/dashboard/) - Interface para consumir informações de execuções de pipelines;
[Tekton Hub](https://hub-preview.tekton.dev/) - Coleção de tasks disponíveis para execução de determinadas tarefas;
[CLI Tool](https://tekton.dev/docs/cli/) - Ferramenta de linha de comando para consumir informações e executar ações no ecossistema;
Tekton Triggers
[EventListener](https://tekton.dev/docs/triggers/eventlisteners/) - Elemento responsável por interceptar as requisições feitas ao endereço do
Ingress
;[Trigger](https://tekton.dev/docs/triggers/triggers/) - Elemento responsável por configurar os gatilhos que ativarão determinadas `TriggerTemplate`s;
[TriggerBinding](https://tekton.dev/docs/triggers/triggerbindings/) - Permite a captura de informações de um evento, e transformação em um parâmetro consumível pela
Pipeline
;[TriggerTemplate](https://tekton.dev/docs/triggers/triggertemplates/) - Cria um template de invocação de algum elemento do pacote de pipelines. (Eg.
PipelineRun
,TaskRun
).
EventListener
Cria uma
Service
que pode ser anexado a umIngress
para receber requisições externas (eg. Endereço utilizado nowebhook
do repositório);É a entidade que aglomerá os
Trigger`s que tratarão as requisições ao `EventListener
.
Trigger
O chaveamento entre qual pipeline deve ser executada é feito utilizando `interceptor`s;
Por padrão possui interceptors para
Github
,Gitlab
,Github
eCEL
.O interceptor
CEL
é o mais versátil, definindo filtros e overlays às informações.Filtros: Informa quais campos da requisição vai disparar o gatilho. (eg.
"header.match('X-GitHub-Event', 'pull_request')"
);Overlays: Executa transformações em campos da requisição, para consumo na pipeline. (eg.
"body.pull_request.head.sha.truncate(7)"
).
TriggerBinding
Traduz campos da requisição para parâmetros que serão consumidos na pipeline.
Os campos do envolope
HTTP
disponíveis são osHeaders
eBody
.
* name: triggered-event
value: $(header.X-Github-Event)
* name: event-action
value: $(body.action)
TriggerTemplate
Neste objeto são configurados os templates padrão para cada evento disparado em um dos
Triggers
;Recebe os parâmetros de uma
TriggerBinding
e os atribui a umPipelineRun
ouTaskRun
;
Tekton Pipelines
[Pipeline](https://tekton.dev/docs/pipelines/pipelines/) - Objeto que agrupa `Task`s comuns à pipeline;
[PipelineRun](https://tekton.dev/docs/pipelines/pipelineruns/) - Instancia e executa uma
Pipeline
;[PipelineResource](https://tekton.dev/docs/pipelines/resources/) - Objetos que serão utilizados como entradas/saídas de uma
Task
;[Task](https://tekton.dev/docs/pipelines/tasks/) - É uma coleção de
Steps
a serem executados para conclusão de uma determinada tarefa;[TaskRun](https://tekton.dev/docs/pipelines/taskruns/) - Instancia e executa uma determinada
Task
;
Pipeline
Agrupa
Tasks
para um fim específico;Os parâmetros são inputados por um objeto
PipelineRun
;Pode possuir recursos que são esperados.(Eg. repositório, pullrequest, imagem docker)
Vários repositórios podem consumir a mesma pipeline, com parâmetros diferentes.
Os volumes, utilizados para transição de informações entre
Tasks
são denominados workspaces.Workspaces podem ser utilizados para reutilizar bibliotecas e acelerar o processo de build (node_modules(nodejs/frontend), .terraform(:P), .m2(JAVA), vendor(PHP))
PipelineResource
Ajudam a abstrair os recursos consumidos por uma
Pipeline
/Task
;Podem ser de entrada(input), ou de saída(output);
Podem ser dos tipos:
Git
,PullRequest
,Image
,Cluster
,GCS
eCloudEvent
.
Task
O padrão [init-container](https://www.magalix.com/blog/kubernetes-patterns-the-init-container-pattern) é utilizado para garantir a execução ordenada das tasks
É executada em um
Pod
no cluster;Possui uma versão que transpõem o namespace
ClusterTask
;Cada
Step
dentro de umaTask
é traduzido em um container sendo executado.Como um objeto do Kubernetes, pode consumir outros objetos, como
ConfigMaps
eSecrets
.
apiVersion: tekton.dev/v1beta1
kind: ClusterTask
metadata:
name: webhook-debug
annotations:
description: |
Imprime as informações informadas pelo webhook
spec:
params:
- name: pipelinerun-name
description: Nome do pipelinerun executado
- name: repo-name
description: Nome do repositório
steps:
- name: print-webhook-informations
image: alpine:latest
script: |
#!/usr/bin/env sh
echo "$(inputs.params.pipelinerun-name)"
echo "$(inputs.params.repo-name)"
graph TD;
PipelineRun -->|Instancia uma pipeline com determinados parâmetros| Pipeline;
Pipeline -->|Instancia uma lista de tarefas| TaskRun;
TaskRun -->|Instancia uma tarefa| Task;
Task -->|Executa procedimentos para execução de uma tarefa| Steps;