PipelineRuns
PipelineRun - это собственный ресурс Kubernetes, который инициирует выполнение Pipeline. PipelineRuns отвечают за выполнение задач, определенных в Pipeline, и управление их жизненным циклом, предоставляя способ запуска комплексных CI/CD рабочих процессов.
Содержание
Зачем нужны PipelineRunsПроблемы CI/CD рабочего процессаРешение TektonПреимуществаСценарииОграничения и ограниченияПринципыМодель выполнения PipelineRunСтатус PipelineRunПримеры конфигурацииПример базового PipelineRunPipelineRun с встроенным определением PipelineВажные параметрыТайм-аутСценарии использованияПринципыПример конфигурацииServiceAccountСценарии использованияПринципыПример конфигурацииTaskRunSpecsСценарии использованияПринципыПример конфигурацииРабочие пространстваСценарии использованияПринципыПример конфигурацииУправление статусом PipelineRunМониторинг статуса выполненияОтмена PipelineRunКорректная остановка PipelineRunСсылкиЗачем нужны PipelineRuns
Проблемы CI/CD рабочего процесса
В системах CI/CD существует несколько проблем, связанных с выполнением рабочего процесса:
- Оркестрация рабочего процесса: Необходимость координировать несколько задач в определенном порядке
- Координация ресурсов: Необходимость управления ресурсами между несколькими задачами
- Обмен данными: Необходимость обмена данными между задачами в рабочем процессе
- Отслеживание выполнения: Необходимость отслеживать прогресс всего рабочего процесса
- Обработка ошибок: Необходимость обработки сбоев как на уровне задач, так и на уровне рабочего процесса
- Аудируемость: Необходимость ведения учетной записи всех выполнений рабочего процесса
Решение Tekton
PipelineRuns от Tekton решают эти проблемы следующим образом:
- Экземпляр рабочего процесса: Каждый PipelineRun представляет собой одно выполнение Pipeline с определенными входными данными
- Оркестрация: PipelineRuns управляют порядком выполнения задач на основе зависимостей
- Привязка ресурсов: PipelineRuns связывают фактические ресурсы с требованиями Pipeline
- Отслеживание статуса: PipelineRuns отслеживают статус выполнения каждой задачи
- Передача результатов: PipelineRuns позволяют обмениваться результатами между задачами
- Интеграция с Kubernetes: PipelineRuns используют Kubernetes для управления ресурсами и планирования
Преимущества
- Изоляция: Каждый PipelineRun выполняется независимо, что позволяет параллельно выполнять один и тот же Pipeline
- Отслеживаемость: PipelineRuns предоставляют подробную историю выполнения и логи
- Гибкость: PipelineRuns могут переопределять параметры Pipeline и привязки рабочих пространств
- Повторное использование: Один и тот же Pipeline может быть выполнен с разными входными данными через разные PipelineRuns
- Интеграция: PipelineRuns могут инициироваться различными системами через API Kubernetes
- Наблюдаемость: Статус и логи PipelineRun могут быть отслежены через инструменты Kubernetes
Сценарии
PipelineRuns полезны в различных сценариях, включая:
- CI/CD приложений: Сборка, тестирование и развертывание приложений
- Инфраструктура как код: Обеспечение и управление инфраструктурой
- Управление релизами: Координация сложных процессов релиза
- Запланированные рабочие процессы: Запуск рабочих процессов по расписанию
- Событийно-ориентированные рабочие процессы: Запуск рабочих процессов в ответ на внешние события
Ограничения и ограничения
- PipelineRuns выполняются в пределах одного кластера Kubernetes
- После запуска параметры PipelineRun не могут быть изменены
- У PipelineRuns ограниченные возможности повторного запуска для неудавшихся задач
- Время выполнения PipelineRun ограничено тайм-аутами подов Kubernetes
- PipelineRuns не могут быть приостановлены после начала выполнения (за исключением задач "finally")
Принципы
Модель выполнения PipelineRun
Когда создается PipelineRun:
- Tekton проверяет спецификацию PipelineRun
- Tekton создает TaskRuns для каждой задачи в Pipeline
- TaskRuns выполняются на основе их зависимостей
- Результаты задач собираются и могут быть использованы последующими задачами
- Статус PipelineRun обновляется по мере завершения каждого TaskRun
- Задачи "Finally" выполняются после завершения или сбоя всех других задач
- PipelineRun завершается, когда все TaskRuns завершаются
Статус PipelineRun
Статус PipelineRun предоставляет подробную информацию о выполнении:
- Общий статус (Запуск, Успешно, Неудача и т.д.)
- Время начала и завершения
- Индивидуальные статусы TaskRun
- Результаты задач
- Причина сбоя (если применимо)
- Имена TaskRun для доступа к логам
Примеры конфигурации
Пример базового PipelineRun
PipelineRun с встроенным определением Pipeline
Важные параметры
Тайм-аут
Тайм-аут позволяет установить максимальную продолжительность для выполнения PipelineRun.
Сценарии использования
- Предотвращение неограниченного потребления ресурсов длительными Pipeline
- Обеспечение завершения CI/CD рабочих процессов в разумные сроки
- Обработка зависших или заблокированных задач
Принципы
Тайм-ауты:
- Указываются в спецификации PipelineRun
- Применяются ко всему выполнению PipelineRun или конкретным разделам (задачам, finally)
- Измеряются от начала первой задачи до завершения последней задачи
- Приводят к сбою PipelineRun в случае превышения
Пример конфигурации
ServiceAccount
ServiceAccount позволяет указать учетную запись сервиса Kubernetes, используемую для аутентификации.
Сценарии использования
- Предоставление учетных данных для доступа к частным контейнерным реестрам
- Аутентификация с облачными провайдерами
- Авторизация доступа к ресурсам Kubernetes
- Предоставление учетных данных для операций с Git
Принципы
ServiceAccounts:
- Могут быть указаны на уровне PipelineRun для всех задач
- Могут быть сопоставлены с конкретными задачами с помощью taskRunSpecs
- Предоставляют учетные данные через секреты Kubernetes
- Обеспечивают безопасный доступ к внешним ресурсам
Пример конфигурации
TaskRunSpecs
TaskRunSpecs позволяют настраивать конфигурации отдельных TaskRun в пределах PipelineRun.
Сценарии использования
- Применение разных ServiceAccounts к различным задачам
- Установка шаблонов пода для конкретных задач
- Настройка тайм-аутов для конкретных задач
- Применение вычислительных ресурсов для конкретных задач
Принципы
TaskRunSpecs:
- Переопределяют стандартные конфигурации PipelineRun для конкретных задач
- Позволяют точно настраивать среды выполнения задач
- Могут использоваться для удовлетворения конкретных требований безопасности или ресурсов
- Обеспечивают различные конфигурации для различных этапов Pipeline
Пример конфигурации
Рабочие пространства
Рабочие пространства позволяют обмениваться данными между задачами в Pipeline.
Сценарии использования
- Обмен исходным кодом между задачами сборки и тестирования
- Передача артефактов сборки задачам развертывания
- Обмен файлами конфигурации между несколькими задачами
- Сохранение данных между выполнениям Pipeline
Принципы
Рабочие пространства:
- Объявляются в Pipeline и привязываются в PipelineRun
- Могут поддерживаться различными типами томов (PVC, ConfigMap, Secret и т.д.)
- Позволяют обмен данными без прямых зависимостей
- Поддерживают разные режимы доступа (ТолькоДляЧтения, ЧтениеИЗапись)
Пример конфигурации
Управление статусом PipelineRun
Мониторинг статуса выполнения
Поле статуса PipelineRun предоставляет подробную информацию о прогрессе выполнения:
Отмена PipelineRun
Чтобы отменить запущенный PipelineRun, обновите его поле spec.status:
Это немедленно завершает все выполняющиеся TaskRuns и не выполняет ожидающие задачи или задачи finally.
Корректная остановка PipelineRun
Чтобы корректно остановить PipelineRun, позволяя выполнять задачи finally:
Это завершит текущие выполняющиеся задачи, но не запустит новые, за исключением задач finally.