• Русский
  • Конвейеры

    Конвейер — это набор задач, которые выполняются в определенном порядке для реализации рабочего процесса CI/CD. Конвейеры определяют порядок выполнения задач, включая их зависимости, параметры и рабочие пространства, что позволяет создавать сложные автоматизированные рабочие процессы.

    Зачем нужны Конвейеры

    Проблемы традиционного CI/CD

    Традиционные системы CI/CD часто сталкиваются с трудностями при создании сложных рабочих процессов:

    • Управление сложностью: Сложности в управлении зависимостями между различными этапами
    • Повторное использование: Ограниченная возможность повторного использования компонентов рабочего процесса в разных проектах
    • Гибкость: Ограничения в адаптации рабочих процессов к различным требованиям
    • Видимость: Ограниченная информация о выполнении рабочего процесса и его прогрессе

    Решение Tekton

    Konveyery Tekton решают эти проблемы, предлагая:

    • Декларативное определение: Конвейеры определяются как пользовательские ресурсы Kubernetes
    • Оркестрация задач: Конвейеры управляют порядком выполнения и зависимостями между задачами
    • Обмен данными: Конвейеры облегчают обмен данными между задачами через рабочие пространства и результаты
    • Повторное использование: Компоненты конвейера можно делиться и повторно использовать в рамках различных проектов
    • Гибкость: Конвейеры поддерживают условное выполнение и динамические параметры

    Преимущества

    • Модульность: Разделение сложных рабочих процессов на повторно используемые задачи
    • Управление зависимостями: Определение четких зависимостей между задачами
    • Параллелизм: Выполнение независимых задач одновременно
    • Условное выполнение: Запуск задач в зависимости от условий
    • Обмен результатами: Передача данных между задачами через результаты
    • Обмен рабочими пространствами: Обмен файлами и данными между задачами через рабочие пространства
    • Повторное использование: Создание шаблонов рабочих процессов, которые можно использовать повторно

    Сценарии

    Конвейеры полезны в различных сценариях, включая:

    • Рабочие процессы CI/CD: Сборка, тестирование и развертывание приложений
    • Многофункциональные развертывания: Развертывание в средах разработки, тестирования и эксплуатации
    • Сложные процессы сборки: Управление зависимостями между этапами сборки
    • Управление релизами: Координация действий по релизу между несколькими компонентами
    • Автоматизация инфраструктуры: Оркестрация предоставления и конфигурации инфраструктуры

    Модель выполнения конвейера

    Когда конвейер выполняется через PipelineRun:

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

    Ключевые концепции

    Зависимости задач

    Задачи в конвейере могут зависеть друг от друга двумя способами:

    1. Последовательные зависимости: Использование поля runAfter для указания, что задача должна быть выполнена после другой задачи
    2. Зависимости данных: Когда одна задача использует результаты другой задачи

    Пример:

    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)"

    Параметры

    Параметры позволяют передавать значения в конвейер во время выполнения. Их можно использовать для настройки поведения задач в рамках конвейера.

    Случаи использования

    • Настройка параметров сборки
    • Указание целевых развертываний
    • Установка номеров версий
    • Управление флагами функций

    Принципы

    Параметры:

    • Указываются в спецификации конвейера
    • Передаются при создании PipelineRun
    • Доступны для задач в рамках конвейера
    • Могут иметь значения по умолчанию

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

    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)"

    Рабочие пространства

    Рабочие пространства позволяют задачам в конвейере обмениваться данными. Они объявляются на уровне конвейера, а затем отображаются на отдельные задачи.

    Случаи использования

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

    Принципы

    Рабочие пространства в конвейерах:

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

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

    apiVersion: tekton.dev/v1
    kind: Pipeline
    metadata:
      name: build-test-deploy
    spec:
      workspaces:
        - name: source-code
          description: Рабочее пространство, содержащее исходный код
      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

    Результаты

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

    Случаи использования

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

    Принципы

    Результаты в конвейерах:

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

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

    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)"

    Завершающие задачи

    Завершающие задачи выполняются после завершения всех других задач в конвейере, независимо от успеха или неудачи. Они полезны для операций очистки или уведомлений.

    Случаи использования

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

    Принципы

    Завершающие задачи:

    • Выполняются после завершения всех других задач
    • Выполняются независимо от того, успешен ли конвейер или нет
    • Не могут зависеть от других задач
    • Не могут зависеть от других задач

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

    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

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

    Задачи могут выполняться условно с использованием поля when, что позволяет вам указывать условия в зависимости от параметров или результатов.

    Случаи использования

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

    Принципы

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

    • Определяется с использованием поля when
    • Может ссылаться на параметры и результаты
    • Поддерживает различные операторы (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"]

    Ограничения и недостатки

    • Конвейеры не могут иметь циклические зависимости между задачами
    • Конвейер не может изменять собственную спецификацию во время выполнения
    • Результаты задачи должны быть получены до их использования другими задачами
    • Размер результатов задач ограничен (обычно несколькими килобайтами)
    • Конвейеры имеют ограниченные возможности для обработки динамического создания задач

    Ссылки