Что такое Tekton?
Tekton — это open-source, cloud-native фреймворк для создания CI/CD систем в Kubernetes. Он предоставляет Kubernetes-native ресурсы для декларативного описания пайплайнов сборки, тестирования и развертывания.
Основные компоненты Tekton
- Tasks — отдельные шаги пайплайна
- Pipelines — последовательности задач
- TaskRuns — исполнения отдельных задач
- PipelineRuns — исполнения пайплайнов
- Triggers — автоматический запуск пайплайнов
- Results — передача данных между задачами
- Workspaces — общие файловые системы
Установка Tekton
1# Установка Tekton Pipelines
2kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
3
4# Установка Tekton Triggers
5kubectl apply --filename https://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml
6
7# Установка Tekton Dashboard
8kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/latest/tekton-dashboard-release.yaml
9
10# Проверка установки
11kubectl get pods --namespace tekton-pipelines
12
13# Port forwarding для доступа к Dashboard
14kubectl port-forward -n tekton-pipelines service/tekton-dashboard 9097:9097
Создание Task
1# python-test-task.yaml
2apiVersion: tekton.dev/v1beta1
3kind: Task
4metadata:
5 name: python-test
6spec:
7 params:
8 - name: python-version
9 description: Python version to use
10 default: "3.9"
11 - name: requirements-file
12 description: Requirements file path
13 default: "requirements.txt"
14 workspaces:
15 - name: source
16 description: Source code workspace
17 steps:
18 - name: install-dependencies
19 image: python:$(params.python-version)
20 workingDir: $(workspaces.source.path)
21 script: |
22 #!/usr/bin/env bash
23 pip install --upgrade pip
24 pip install -r $(params.requirements-file)
25 # poetry install (если используется Poetry)
26
27 - name: run-tests
28 image: python:$(params.python-version)
29 workingDir: $(workspaces.source.path)
30 script: |
31 #!/usr/bin/env bash
32 pytest tests/ --junitxml=test-results.xml --cov=app --cov-report=xml
33
34 - name: publish-results
35 image: python:$(params.python-version)
36 workingDir: $(workspaces.source.path)
37 script: |
38 #!/usr/bin/env bash
39 echo "Tests completed successfully"
40 # Здесь можно добавить публикацию результатов
Создание Pipeline
1# python-pipeline.yaml
2apiVersion: tekton.dev/v1beta1
3kind: Pipeline
4metadata:
5 name: python-ci-pipeline
6spec:
7 params:
8 - name: git-url
9 description: Git repository URL
10 - name: git-revision
11 description: Git revision
12 default: main
13 - name: image-name
14 description: Docker image name
15 workspaces:
16 - name: shared-data
17 description: Shared workspace
18 tasks:
19 - name: fetch-source
20 taskRef:
21 name: git-clone
22 workspaces:
23 - name: output
24 workspace: shared-data
25 params:
26 - name: url
27 value: $(params.git-url)
28 - name: revision
29 value: $(params.git-revision)
30
31 - name: run-tests
32 taskRef:
33 name: python-test
34 runAfter:
35 - fetch-source
36 workspaces:
37 - name: source
38 workspace: shared-data
39
40 - name: build-image
41 taskRef:
42 name: buildah
43 runAfter:
44 - run-tests
45 workspaces:
46 - name: source
47 workspace: shared-data
48 params:
49 - name: IMAGE
50 value: $(params.image-name):$(params.git-revision)
51
52 - name: deploy
53 taskRef:
54 name: kubernetes-actions
55 runAfter:
56 - build-image
57 params:
58 - name: script
59 value: |
60 kubectl set image deployment/myapp myapp=$(params.image-name):$(params.git-revision)
61 kubectl rollout status deployment/myapp
Запуск PipelineRun
1# pipelinerun.yaml
2apiVersion: tekton.dev/v1beta1
3kind: PipelineRun
4metadata:
5 name: python-pipeline-run
6spec:
7 pipelineRef:
8 name: python-ci-pipeline
9 params:
10 - name: git-url
11 value: https://github.com/user/repo.git
12 - name: git-revision
13 value: main
14 - name: image-name
15 value: myregistry/myapp
16 workspaces:
17 - name: shared-data
18 volumeClaimTemplate:
19 spec:
20 accessModes:
21 - ReadWriteOnce
22 resources:
23 requests:
24 storage: 1Gi
Tekton Triggers для автоматизации
1# eventlistener.yaml
2apiVersion: triggers.tekton.dev/v1beta1
3kind: EventListener
4metadata:
5 name: github-listener
6spec:
7 serviceAccountName: tekton-triggers-sa
8 triggers:
9 - name: github-push
10 interceptors:
11 - github:
12 secretRef:
13 secretName: github-secret
14 secretKey: secretToken
15 eventTypes:
16 - push
17 bindings:
18 - ref: github-push-binding
19 template:
20 ref: github-push-template
21
22---
23apiVersion: triggers.tekton.dev/v1beta1
24kind: TriggerBinding
25metadata:
26 name: github-push-binding
27spec:
28 params:
29 - name: git-url
30 value: $(body.repository.clone_url)
31 - name: git-revision
32 value: $(body.head_commit.id)
33
34---
35apiVersion: triggers.tekton.dev/v1beta1
36kind: TriggerTemplate
37metadata:
38 name: github-push-template
39spec:
40 params:
41 - name: git-url
42 - name: git-revision
43 resourcetemplates:
44 - apiVersion: tekton.dev/v1beta1
45 kind: PipelineRun
46 metadata:
47 generateName: python-pipeline-run-
48 spec:
49 pipelineRef:
50 name: python-ci-pipeline
51 params:
52 - name: git-url
53 value: $(tt.params.git-url)
54 - name: git-revision
55 value: $(tt.params.git-revision)
Когда использовать Tekton
- Работаешь в Kubernetes окружении
- Нужна cloud-native CI/CD система
- Важна стандартизация и переносимость
- Команда предпочитает Kubernetes-native подход
- Требуется интеграция с Kubernetes экосистемой
- Нужна гибкость в создании custom пайплайнов
Преимущества Tekton
- Kubernetes-native — полная интеграция с Kubernetes
- Vendor agnostic — не привязан к конкретному провайдеру
- Reusable — переиспользуемые задачи и пайплайны
- Declarative — декларативное описание пайплайнов
- Extensible — легко расширяется custom задачами
- Open Source — полностью открытый исходный код
Альтернативы Tekton
- Argo Workflows — другой Kubernetes-native инструмент
- Jenkins X — GitOps для Jenkins
- GitLab CI/CD — с Kubernetes executor
- GitHub Actions — с self-hosted runners в K8s
- Flux — для GitOps подхода
Best Practices
- Создавай переиспользуемые Task'и
- Используй Workspaces для передачи данных
- Настрой proper RBAC для безопасности
- Мониторь ресурсы Kubernetes
- Используй Triggers для автоматизации
- Версионируй свои Task'и и Pipeline'ы
FAQ
Подходит ли Tekton для продакшена?
Да, Tekton используется в production многими компаниями. Это проект CNCF с активным развитием и поддержкой сообщества.
Какие требования к инфраструктуре?
Tekton требует Kubernetes кластер версии 1.24+. Ресурсы зависят от нагрузки, но минимально нужно несколько сотен MB RAM.
Сложно ли мигрировать на Tekton?
Миграция требует переписывания пайплайнов в Kubernetes-native формат, но есть инструменты для автоматизации миграции с других платформ.