Введение
Tekton Results предназначен для того, чтобы помогать пользователям логически группировать исторические записи рабочих нагрузок CI/CD и отделять долгосрочное хранилище Results от контроллера Pipeline. Это позволяет:
- Предоставлять пользовательские метаданные Results о CI/CD workflow, которые недоступны в CRD Tekton TaskRun/PipelineRun (например, действия после завершения run)
- Группировать связанные workloads вместе (например, объединять связанные TaskRun и PipelineRun в единый блок)
- Сделать долгосрочную историю Results независимой от контроллера CRD Pipeline, тем самым освобождая ресурсы etcd для выполнения запусков.
- Сохранять логи, сгенерированные TaskRun/PipelineRun, чтобы завершенные запуски можно было очищать для экономии ресурсов.
Дополнительные сведения и мотивацию дизайна можно найти в TEP-0021.
Обзор
Tekton Results состоит из двух основных компонентов:
- gRPC API server, к которому можно обращаться через API, с постоянным хранилищем в качестве backend (см. исходный код проекта в proto/v1alpha2 для последних спецификаций API).
- Контроллер watcher, используемый для отслеживания и передачи обновлений TaskRun и PipelineRun на API server.
Жизненный цикл Results
- Пользователи создают TaskRun или PipelineRun через Kubernetes API, как обычно.
- Results Watcher отслеживает изменения всех TaskRun/PipelineRun.
- Если TaskRun/PipelineRun изменяется, watcher обновляет (или создает) соответствующий
Recordс помощью Results API (при необходимости также создаетсяResult).- Watcher также добавляет к исходному TaskRun/PipelineRun аннотацию с идентификатором.
- Пользователи могут напрямую получать/запрашивать данные Results/Records из API. После завершения TaskRun/PipelineRun и успешного сохранения в Results API исходные объекты CRD можно безопасно удалить из кластера.
Модель данных
- Запись — это один экземпляр данных. Обычно это данные выполнения (например, PipelineRun, TaskRun, логи), но она также может ссылаться на другие данные о событиях/выполнениях. Записи спроектированы так, чтобы гибко поддерживать любую информацию, которую инструменты хотят предоставлять о CI-событиях.
- Результаты — это агрегаторы записей, позволяющие пользователям ссылаться на группы записей как на единую сущность. Например, у вас может быть Result, объединяющий следующие записи:
- Исходное событие, которое запустило операцию (например, pull request, push).
- Созданный PipelineRun.
- TaskRun, созданные в ответ на PipelineRun.
- Получение cloud events.
- Получение обновлений состояния источника.
(Примечание: в настоящее время watcher не поддерживает все эти типы данных, но это примеры данных, которые мы намерены поддерживать.)