• Русский
  • Tasks

    Задача (Task) — это набор шагов (Steps), которые выполняются последовательно на одном и том же узле в Kubernetes. Задачи являются основными строительными блоками рабочего процесса CI/CD в Tekton, позволяя определить последовательность операций для выполнения.

    Зачем нужны Tasks

    Традиционные проблемы CI/CD

    В традиционных системах CI/CD шаги рабочего процесса часто тесно связаны с самой платформой CI/CD. Это создает несколько проблем:

    • Портативность: Рабочие процессы, определённые в одной системе CI/CD, нельзя легко перенести в другую
    • Гибкость: Ограниченные возможности настройки среды выполнения для разных шагов
    • Масштабируемость: Сложности с масштабированием отдельных шагов в зависимости от требований к ресурсам
    • Повторное использование: Шаги, определённые для одного проекта, трудно использовать в других проектах

    Решение Tekton

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

    • Выполнению в контейнерах: Каждый шаг запускается в собственном контейнере, обеспечивая изоляцию и гибкость
    • Нативной интеграции с Kubernetes: Задачи запускаются как поды Kubernetes, используя возможности планирования и масштабирования Kubernetes
    • Декларативному определению: Задачи определяются как Custom Resources Kubernetes, что делает их портируемыми и управляемыми версиями
    • Повторному использованию: Задачи можно делиться и повторно использовать между проектами и командами

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

    • Изоляция: Каждый шаг выполняется в отдельном контейнере, предотвращая конфликты зависимостей
    • Портативность: Задачи могут запускаться на любом кластере Kubernetes без изменений
    • Повторное использование: Задачи можно использовать в разных командах и проектах
    • Масштабируемость: Задачи используют возможности планирования и управления ресурсами Kubernetes
    • Гибкость: Задачи можно настраивать с помощью параметров и рабочих областей (workspaces)
    • Наблюдаемость: Выполнение задач можно мониторить и логировать через Kubernetes

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

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

    • Операции сборки: Компиляция исходного кода, запуск модульных тестов
    • Операции развертывания: Развертывание приложений в разных средах
    • Операции валидации: Запуск проверок безопасности, проверок качества кода
    • Операции с инфраструктурой: Подготовка и настройка инфраструктуры
    • Обработка данных: ETL-процессы, проверка данных

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

    • Задачи выполняются на одном узле Kubernetes и не могут охватывать несколько узлов
    • Все шаги в задаче разделяют жизненный цикл одного пода
    • Шаги в задаче должны выполняться последовательно, а не параллельно
    • Задачи имеют ограниченные возможности для условного выполнения (для сложных условий используйте Pipelines)
    • Время выполнения задачи ограничено таймаутом пода Kubernetes

    Принципы

    Модель выполнения задачи

    При запуске задачи через TaskRun:

    1. Kubernetes создаёт Pod для задачи
    2. Каждый шаг задачи становится контейнером в Pod
    3. Шаги выполняются последовательно в заданном порядке
    4. Tekton внедряет бинарник entrypoint в каждый контейнер шага
    5. Entrypoint обеспечивает правильный порядок выполнения шагов
    6. Рабочие области монтируются как тома в Pod
    7. Параметры передаются задаче через переменные окружения или файлы
    8. Результаты сохраняются и становятся доступны для последующих задач

    Выполнение шагов

    Шаги внутри задачи выполняются последовательно. Каждый шаг:

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

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

    Пример простой задачи

    apiVersion: tekton.dev/v1
    kind: Task
    metadata:
      name: build
    spec:
      workspaces:
        - name: source
          description: Рабочая область, содержащая исходный код
      steps:
        - name: build
          image: golang
          workingDir: $(workspaces.source.path)
          script: |
            go build -o app .

    Результаты

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

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

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

    Принципы

    Результаты:

    • Объявляются в спецификации задачи
    • Записываются в определённый файл задачей
    • Читаются Tekton после завершения задачи
    • Доступны для последующих задач в Pipeline

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

    apiVersion: tekton.dev/v1
    kind: Task
    metadata:
      name: generate-version
    spec:
      results:
        - name: version
          description: Сгенерированный номер версии
      steps:
        - name: generate
          image: ubuntu
          script: |
            echo "1.0.$(date +%s)" | tee $(results.version.path)

    Важные параметры

    Рабочие области (Workspaces)

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

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

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

    Принципы

    Рабочие области:

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

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

    apiVersion: tekton.dev/v1
    kind: Task
    metadata:
      name: build
    spec:
      workspaces:
        - name: source
          description: Рабочая область, содержащая исходный код
          optional: true
      steps:
        - name: build
          image: golang
          workingDir: $(workspaces.source.path)
          script: |
            go build -o app .

    Ссылки