• Русский
  • Задачи

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

    Зачем нужны задачи

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

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

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

    Решение Tekton

    Задачи Tekton решают эти проблемы следующим образом:

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

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

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

    Сценарии

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

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

    Ограничения и ограничения

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

    Принципы

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

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

    1. Kubernetes создает под для задачи
    2. Каждый шаг в задаче становится контейнером в поде
    3. Шаги выполняются последовательно в указанном порядке
    4. Tekton внедряет исполняемый файл точки входа в каждый контейнер шага
    5. Точка входа обеспечивает выполнение шагов в правильном порядке
    6. Рабочие пространства монтируются как тома в поде
    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 после завершения задачи
    • Доступны следующим задачам в конвейере

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

    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)

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

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

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

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

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

    Принципы

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

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

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

    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 .

    Ссылки