1. posts/

Pipelines com o Tekton - Introdução

··3 minutos·

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


EventListener

  • Cria uma Service que pode ser anexado a um Ingress para receber requisições externas (eg. Endereço utilizado no webhook 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 e CEL.

  • 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 os Headers e Body.

* 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 um PipelineRun ou TaskRun;

plantuml tekton workflow
Tekton workflow diagram

Tekton Pipelines


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 e CloudEvent.


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 uma Task é traduzido em um container sendo executado.

  • Como um objeto do Kubernetes, pode consumir outros objetos, como ConfigMaps e Secrets.


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;