• Русский
  • Pipelines

    Pipeline — это набор Tasks, которые выполняются в определённом порядке для реализации CI/CD workflow. Pipelines определяют порядок выполнения Tasks, включая их зависимости, параметры и workspaces, что позволяет создавать сложные автоматизированные workflow.

    Зачем нужны 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:

    1. Tekton анализирует Pipeline для определения порядка выполнения Tasks
    2. Tasks без зависимостей начинают выполняться сразу
    3. Tasks с зависимостями ждут завершения своих зависимостей
    4. Tasks, которые могут выполняться параллельно, запускаются одновременно
    5. Pipeline завершается, когда все Tasks выполнены или когда критический Task завершился с ошибкой

    Ключевые понятия

    Зависимости Tasks

    Tasks в Pipeline могут зависеть друг от друга двумя способами:

    1. Порядковые зависимости: с помощью поля runAfter, указывающего, что Task должен выполняться после другого Task
    2. Зависимости по данным: когда один Task использует Results другого Task

    Пример:

    apiVersion: tekton.dev/v1
    kind: Pipeline
    metadata:
      name: order-tasks
    spec:
      tasks:
        - name: task1
          taskRef:
            name: task1
        - name: task2
          taskRef:
            name: task2
          runAfter:
            - task1
          params:
            - name: param1
              value: "$(tasks.task1.results.result)"
        - name: task3
          taskRef:
            name: task3
          params:
            - name: param1
              value: "$(tasks.task2.results.result)"

    Параметры

    Параметры позволяют передавать значения в Pipeline во время выполнения. Они используются для настройки поведения Tasks внутри Pipeline.

    Сценарии использования

    • Конфигурация опций сборки
    • Указание целей деплоя
    • Задание номеров версий
    • Управление флагами функций

    Принципы

    Параметры:

    • Объявляются в спецификации Pipeline
    • Передаются при создании PipelineRun
    • Доступны Tasks внутри Pipeline
    • Могут иметь значения по умолчанию

    Пример конфигурации

    apiVersion: tekton.dev/v1
    kind: Pipeline
    metadata:
      name: build-and-deploy
    spec:
      params:
        - name: image-name
          type: string
          description: Имя образа для сборки
        - name: environment
          type: string
          description: Окружение для деплоя
          default: "development"
      tasks:
        - name: build
          taskRef:
            name: build-image
          params:
            - name: image
              value: "$(params.image-name)"

    Workspaces

    Workspaces позволяют Tasks в Pipeline обмениваться данными. Они объявляются на уровне Pipeline и затем сопоставляются с отдельными Tasks.

    Сценарии использования

    • Совместное использование исходного кода между Tasks
    • Передача артефактов сборки между Tasks
    • Совместное использование конфигурационных файлов
    • Сохранение состояния между запусками Pipeline

    Принципы

    Workspaces в Pipelines:

    • Объявляются в спецификации Pipeline
    • Сопоставляются с workspace Tasks
    • Привязываются к реальному хранилищу при создании PipelineRun
    • Могут использоваться несколькими Tasks

    Пример конфигурации

    apiVersion: tekton.dev/v1
    kind: Pipeline
    metadata:
      name: build-test-deploy
    spec:
      workspaces:
        - name: source-code
          description: Workspace с исходным кодом
      tasks:
        - name: fetch-source
          taskRef:
            name: git-clone
          workspaces:
            - name: output
              workspace: source-code
        - name: build
          taskRef:
            name: build-app
          workspaces:
            - name: source
              workspace: source-code
          runAfter:
            - fetch-source

    Results

    Results позволяют Tasks генерировать выходные значения, которые могут использоваться другими Tasks в Pipeline.

    Сценарии использования

    • Передача информации о версии сборки
    • Обмен путями сгенерированных артефактов
    • Передача результатов тестов
    • Передача URL деплоя

    Принципы

    Results в Pipelines:

    • Создаются Tasks
    • Ссылаются с помощью синтаксиса $(tasks.taskName.results.resultName)
    • Используются как входные данные для последующих Tasks
    • Могут включаться в результаты Pipeline

    Пример конфигурации

    apiVersion: tekton.dev/v1
    kind: Pipeline
    metadata:
      name: build-and-deploy
    spec:
      tasks:
        - name: generate-version
          taskRef:
            name: semver
          results:
            - name: version
        - name: build
          taskRef:
            name: build-image
          params:
            - name: version
              value: "$(tasks.generate-version.results.version)"
          runAfter:
            - generate-version
      results:
        - name: build-version
          value: "$(tasks.generate-version.results.version)"

    Finally Tasks

    Finally Tasks выполняются после завершения всех остальных Tasks в Pipeline, независимо от успеха или ошибки. Они полезны для операций очистки или уведомлений.

    Сценарии использования

    • Очистка ресурсов
    • Отправка уведомлений
    • Архивирование логов
    • Генерация отчётов

    Принципы

    Finally Tasks:

    • Запускаются после всех остальных Tasks
    • Выполняются независимо от результата Pipeline
    • Не могут зависеть от других Tasks
    • На них не могут ссылаться другие Tasks

    Пример конфигурации

    apiVersion: tekton.dev/v1
    kind: Pipeline
    metadata:
      name: build-test-deploy
    spec:
      tasks:
        - name: build
          taskRef:
            name: build-app
        - name: test
          taskRef:
            name: run-tests
          runAfter:
            - build
      finally:
        - name: cleanup
          taskRef:
            name: cleanup-resources
        - name: notify
          taskRef:
            name: send-notification

    Условное выполнение

    Tasks могут выполняться условно с помощью поля when, которое позволяет задавать условия на основе Parameters или Results.

    Сценарии использования

    • Деплой только на определённых ветках
    • Запуск тестов при изменениях в коде
    • Выполнение задач на основе пользовательского ввода
    • Пропуск задач в зависимости от предыдущих результатов

    Принципы

    Условное выполнение:

    • Определяется через поле when
    • Может ссылаться на Parameters и Results
    • Поддерживает различные операторы (in, notin)
    • Позволяет комбинировать несколько условий

    Пример конфигурации

    apiVersion: tekton.dev/v1
    kind: Pipeline
    metadata:
      name: build-test-deploy
    spec:
      params:
        - name: environment
          type: string
      tasks:
        - name: build
          taskRef:
            name: build-app
        - name: deploy-to-production
          taskRef:
            name: deploy
          runAfter:
            - build
          when:
            - input: "$(params.environment)"
              operator: in
              values: ["production"]

    Ограничения и лимиты

    • В Pipeline не допускаются циклические зависимости между Tasks
    • Pipeline не может изменять собственное определение во время выполнения
    • Results Tasks должны быть созданы до того, как их смогут использовать другие Tasks
    • Размер Results ограничен (обычно несколькими килобайтами)
    • Pipelines имеют ограниченную возможность динамического создания Tasks

    Ссылки