
O Tekton Pipeline é um novo projeto que permite executar pipelines de CI / CD usando a abordagem nativa do Kubernetes. A Tekton Pipelines fazia parte originalmente do projeto “Knative build”. Se você quiser saber mais sobre este projeto, eu recomendo visitar o site deles, que está disponível no link aqui .
Antes de começarmos a falar sobre o que significa "nativo do Kubernetes" e como o Tekton Pipeline funciona, eu gostaria de dar um passo para trás e explicar brevemente por que a execução de pipelines em contêineres e não no host é tão importante e útil: há algum tempo começamos a transferir os aplicativos com os quais trabalhamos para contêineres. Fizemos isso devido a benefícios como isolamento, dependências transparentes, escalabilidade e imutabilidade. Isso não seria tão útil para os pipelines de CI / CD? Pense em “build-hosts”, que forneceria as ferramentas e dependências necessárias para uma tarefa de construção específica. Sobre um ambiente que seria o mesmo toda vez que fosse lançado e não teria nenhuma dependência de outros projetos, o que poderia causar problemas. E também, sobre pipelines fáceis de dimensionar. É por isso que podemos e devemos executar pipelines em contêineres!
Agora que falamos brevemente sobre contêiner para pipelines, vamos falar sobre como o projeto Tekton Pipeline com sua abordagem nativa Kubernetes pode ajudar:
O Tekton Pipeline nos permite executar pipelines em contêineres em nossos clusters Kubernetes existentes. Isso significa que não precisamos de máquinas adicionais para operar nossos dutos e, portanto, podemos usar melhor os já existentes.
É ótimo, mas para ser honesto, isso não torna o Tekton Pipeline único. Portanto, o Tekton Pipeline vai um passo além e armazena tudo relacionado aos nossos pipelines dentro do Kubernetes - como um recurso do Kubernetes. Isso nos permite trabalhar com nossos transportadores, assim como com qualquer outro recurso. Pense em Implantação ou Serviço, que você pode criar e gerenciar usando arquivos kubectl e YAML.

Por onde começar
Como mencionado acima, o Tekton Pipeline está localizado dentro do cluster Kubernetes. Ele é baseado em 5 Definições de Recursos Customizados (CRDs), Implantações, ConfigMaps e Serviços. Você pode executar o seguinte comando para iniciar:
kubectl apply -f https://storage.googleapis.com/tekton-releases/latest/release.yaml
Além dos recursos acima, ele também criará Namespace, Política de Segurança de Pods, Conta de Serviço e ClusterRoles. O Tekton Pipeline está pronto para ser usado assim que todos os Pods no recém-criado espaço para nome (o nome padrão é tekton-pipelines) estiverem prontos.
Obviamente, você pode visualizar este arquivo YAML e personalizá-lo de acordo com suas necessidades.
Se você precisar compartilhar artefatos ou outros recursos de pipelines entre tarefas, precisará configurar o armazenamento para eles. Você pode usar o PVC, que será solicitado sempre que necessário (a inicialização dinâmica do volume é a chave!), Ou armazenamento em Blob. Você encontrará mais informações sobre esta tarefa aqui .
Primeiro pipeline
Então, como os pipelines da Tekton funcionam? Explicarei a diferença entre as Definições de recursos personalizados da Tekton Pipelines em pequenos exemplos. O Pipeline criará (compilar) um aplicativo pequeno no Go, criará a imagem necessária e depois empurrará para o Registro. Você pode encontrar todos os arquivos relevantes aqui .
Primeiro, criamos duas definições de PipelineResouce que usaremos para definir o repositório Git e o Registry como o destino final como o código-fonte. Os recursos de pipeline são opcionais e, portanto, muito úteis para usar os mesmos pipelines, mas com diferentes fontes e destinos.
apiVersion: tekton.dev/v1alpha1 kind: PipelineResource metadata: name: git-repo spec: type: git params: - name: revision value: master - name: url value: https://gitlab.com/nmeisenzahl/tekton-demo --- apiVersion: tekton.dev/v1alpha1 kind: PipelineResource metadata: name: image-registry spec: type: image params: - name: url value: registry.gitlab.com/nmeisenzahl/tekton-demo/demo:latest
Agora precisamos criar um recurso de tarefa para determinar a sequência de etapas em nosso pipeline. Obviamente, se necessário, você pode criar várias tarefas. No nosso exemplo, usaremos o Kaniko para criar imagem. Esse Dockerfile, como outros recursos para o aplicativo, está no repositório Git.
apiVersion: tekton.dev/v1alpha1 kind: Task metadata: name: build-docker-image spec: inputs: resources: - name: git-repo type: git params: - name: pathToDockerFile description: Path to Dockerfile default: /workspace/git-repo/Dockerfile - name: pathToContext description: The build context used by Kaniko default: /workspace/git-repo outputs: resources: - name: image-registry type: image steps: - name: build-and-push image: gcr.io/kaniko-project/executor:v0.10.0 env: - name: "DOCKER_CONFIG" value: "/builder/home/.docker/" command: - /kaniko/executor args: - --dockerfile=${inputs.params.pathToDockerFile} - --destination=${outputs.resources.image-registry.url} - --context=${inputs.params.pathToContext}
Agora podemos criar um recurso TaskRun para iniciar uma instância da tarefa acima. No entanto, neste exemplo, usamos o Pipeline , que podemos usar para combinar várias tarefas (tarefas) em uma linha:
apiVersion: tekton.dev/v1alpha1 kind: Pipeline metadata: name: demo-pipeline spec: resources: - name: git-repo type: git - name: image-registry type: image tasks: - name: build-docker-image taskRef: name: build-docker-image params: - name: pathToDockerFile value: /workspace/git-repo/Dockerfile - name: pathToContext value: /workspace/git-repo resources: inputs: - name: git-repo resource: git-repo outputs: - name: image-registry resource: image-registry
Como colocamos a imagem criada no registro, você precisa se certificar de que o pipeline possa ser autenticado, definindo ImagePullSecrets para a conta de serviço desejada (no nosso caso, é conta de serviço - padrão).
Agora temos todo o necessário para iniciar o pipeline. Para fazer isso, precisamos especificar a última definição para o recurso PipelineRun :
apiVersion: tekton.dev/v1alpha1 kind: PipelineRun metadata: name: demo-pipeline-run-1 spec: pipelineRef: name: demo-pipeline resources: - name: git-repo resourceRef: name: git-repo - name: image-registry resourceRef: name: image-registry
Você pode usar o kubectl get pipelineruns -o yaml
para verificar o status do pipeline.
Além disso,
Além do projeto do Tekton Pipeline, também há um projeto para a CLI que facilita o trabalho com os pipelines. Você também pode configurar um painel baseado na Web para visualizar e gerenciar seus pipelines a partir de um navegador.
Além disso, a mesma equipe está trabalhando em outro projeto chamado Tekton Triggers. Este projeto é relativamente novo (o primeiro commit foi há 4 semanas) e ainda está em desenvolvimento. Os gatilhos Tekton permitem que você chame os pipelines Tekton com base em "gatilhos". Pode ser git-commits, git-issues ou qualquer outro webhooks (ganchos da web). Mais informações estão disponíveis aqui .
Leia também outros artigos em nosso blog: