Pipelines
Pipeline — это набор Tasks, которые выполняются в определённом порядке для реализации CI/CD workflow. Pipelines определяют порядок выполнения Tasks, включая их зависимости, параметры и workspaces, что позволяет создавать сложные автоматизированные workflow.
Содержание
Зачем нужны PipelinesТрадиционные проблемы CI/CDРешение TektonПреимуществаСценарииМодель выполнения PipelineКлючевые понятияЗависимости TasksПараметрыСценарии использованияПринципыПример конфигурацииWorkspacesСценарии использованияПринципыПример конфигурацииResultsСценарии использованияПринципыПример конфигурацииFinally TasksСценарии использованияПринципыПример конфигурацииУсловное выполнениеСценарии использованияПринципыПример конфигурацииОграничения и лимитыСсылкиЗачем нужны Pipelines
Традиционные проблемы CI/CD
Традиционные CI/CD системы часто сталкиваются с проблемами при создании сложных workflow:
- Управление сложностью: трудности с управлением зависимостями между различными этапами
- Повторное использование: ограниченные возможности повторного использования компонентов workflow между проектами
- Гибкость: ограничения в адаптации workflow под разные требования
- Видимость: ограниченный обзор выполнения и прогресса workflow
Решение Tekton
Tekton Pipelines решают эти задачи за счёт:
- Декларативного определения: Pipelines определяются как Kubernetes Custom Resources
- Оркестрации Tasks: Pipelines управляют порядком выполнения и зависимостями между Tasks
- Обмена данными: Pipelines обеспечивают обмен данными между Tasks через Workspaces и Results
- Повторного использования: компоненты Pipeline можно использовать повторно в разных проектах
- Гибкости: Pipelines поддерживают условное выполнение и динамические параметры
Преимущества
- Модульность: разбивка сложных workflow на переиспользуемые Tasks
- Управление зависимостями: чёткое определение зависимостей между Tasks
- Параллелизм: одновременное выполнение независимых Tasks
- Условное выполнение: запуск Tasks на основе условий
- Обмен результатами: передача данных между Tasks через Results
- Общий workspace: совместное использование файлов и данных между Tasks через Workspaces
- Повторное использование: создание переиспользуемых шаблонов workflow
Сценарии
Pipelines полезны в различных сценариях, включая:
- CI/CD workflows: сборка, тестирование и деплой приложений
- Многоокружные деплои: деплой в development, staging и production
- Сложные процессы сборки: управление зависимостями между этапами сборки
- Управление релизами: координация релизных активностей между компонентами
- Автоматизация инфраструктуры: оркестрация provisioning и конфигурации инфраструктуры
Модель выполнения Pipeline
При выполнении Pipeline через PipelineRun:
- Tekton анализирует Pipeline для определения порядка выполнения Tasks
- Tasks без зависимостей начинают выполняться сразу
- Tasks с зависимостями ждут завершения своих зависимостей
- Tasks, которые могут выполняться параллельно, запускаются одновременно
- Pipeline завершается, когда все Tasks выполнены или когда критический Task завершился с ошибкой
Ключевые понятия
Зависимости Tasks
Tasks в Pipeline могут зависеть друг от друга двумя способами:
- Порядковые зависимости: с помощью поля
runAfter, указывающего, что Task должен выполняться после другого Task - Зависимости по данным: когда один Task использует Results другого Task
Пример:
Параметры
Параметры позволяют передавать значения в Pipeline во время выполнения. Они используются для настройки поведения Tasks внутри Pipeline.
Сценарии использования
- Конфигурация опций сборки
- Указание целей деплоя
- Задание номеров версий
- Управление флагами функций
Принципы
Параметры:
- Объявляются в спецификации Pipeline
- Передаются при создании PipelineRun
- Доступны Tasks внутри Pipeline
- Могут иметь значения по умолчанию
Пример конфигурации
Workspaces
Workspaces позволяют Tasks в Pipeline обмениваться данными. Они объявляются на уровне Pipeline и затем сопоставляются с отдельными Tasks.
Сценарии использования
- Совместное использование исходного кода между Tasks
- Передача артефактов сборки между Tasks
- Совместное использование конфигурационных файлов
- Сохранение состояния между запусками Pipeline
Принципы
Workspaces в Pipelines:
- Объявляются в спецификации Pipeline
- Сопоставляются с workspace Tasks
- Привязываются к реальному хранилищу при создании PipelineRun
- Могут использоваться несколькими Tasks
Пример конфигурации
Results
Results позволяют Tasks генерировать выходные значения, которые могут использоваться другими Tasks в Pipeline.
Сценарии использования
- Передача информации о версии сборки
- Обмен путями сгенерированных артефактов
- Передача результатов тестов
- Передача URL деплоя
Принципы
Results в Pipelines:
- Создаются Tasks
- Ссылаются с помощью синтаксиса $(tasks.taskName.results.resultName)
- Используются как входные данные для последующих Tasks
- Могут включаться в результаты Pipeline
Пример конфигурации
Finally Tasks
Finally Tasks выполняются после завершения всех остальных Tasks в Pipeline, независимо от успеха или ошибки. Они полезны для операций очистки или уведомлений.
Сценарии использования
- Очистка ресурсов
- Отправка уведомлений
- Архивирование логов
- Генерация отчётов
Принципы
Finally Tasks:
- Запускаются после всех остальных Tasks
- Выполняются независимо от результата Pipeline
- Не могут зависеть от других Tasks
- На них не могут ссылаться другие Tasks
Пример конфигурации
Условное выполнение
Tasks могут выполняться условно с помощью поля when, которое позволяет задавать условия на основе Parameters или Results.
Сценарии использования
- Деплой только на определённых ветках
- Запуск тестов при изменениях в коде
- Выполнение задач на основе пользовательского ввода
- Пропуск задач в зависимости от предыдущих результатов
Принципы
Условное выполнение:
- Определяется через поле
when - Может ссылаться на Parameters и Results
- Поддерживает различные операторы (in, notin)
- Позволяет комбинировать несколько условий
Пример конфигурации
Ограничения и лимиты
- В Pipeline не допускаются циклические зависимости между Tasks
- Pipeline не может изменять собственное определение во время выполнения
- Results Tasks должны быть созданы до того, как их смогут использовать другие Tasks
- Размер Results ограничен (обычно несколькими килобайтами)
- Pipelines имеют ограниченную возможность динамического создания Tasks