• Русский
  • PipelineRuns

    PipelineRun - это собственный ресурс Kubernetes, который инициирует выполнение Pipeline. PipelineRuns отвечают за выполнение задач, определенных в Pipeline, и управление их жизненным циклом, предоставляя способ запуска комплексных CI/CD рабочих процессов.

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

    1. Tekton проверяет спецификацию PipelineRun
    2. Tekton создает TaskRuns для каждой задачи в Pipeline
    3. TaskRuns выполняются на основе их зависимостей
    4. Результаты задач собираются и могут быть использованы последующими задачами
    5. Статус PipelineRun обновляется по мере завершения каждого TaskRun
    6. Задачи "Finally" выполняются после завершения или сбоя всех других задач
    7. PipelineRun завершается, когда все TaskRuns завершаются

    Статус PipelineRun

    Статус PipelineRun предоставляет подробную информацию о выполнении:

    1. Общий статус (Запуск, Успешно, Неудача и т.д.)
    2. Время начала и завершения
    3. Индивидуальные статусы TaskRun
    4. Результаты задач
    5. Причина сбоя (если применимо)
    6. Имена TaskRun для доступа к логам

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

    Пример базового PipelineRun

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: build-deploy-app-run
    spec:
      pipelineRef:
        name: build-deploy-app
      params:
        - name: image-name
          value: my-registry/my-app:latest
        - name: deployment-name
          value: my-app
      workspaces:
        - name: source
          persistentVolumeClaim:
            claimName: app-source-pvc

    PipelineRun с встроенным определением Pipeline

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: simple-pipeline-run
    spec:
      pipelineSpec:
        params:
          - name: message
            type: string
        tasks:
          - name: print-message
            taskSpec:
              params:
                - name: message
                  type: string
              steps:
                - name: print
                  image: ubuntu
                  script: |
                    echo "$(params.message)"
            params:
              - name: message
                value: "$(params.message)"
      params:
        - name: message
          value: "Здравствуйте, Tekton Pipeline!"

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

    Тайм-аут

    Тайм-аут позволяет установить максимальную продолжительность для выполнения PipelineRun.

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

    • Предотвращение неограниченного потребления ресурсов длительными Pipeline
    • Обеспечение завершения CI/CD рабочих процессов в разумные сроки
    • Обработка зависших или заблокированных задач

    Принципы

    Тайм-ауты:

    • Указываются в спецификации PipelineRun
    • Применяются ко всему выполнению PipelineRun или конкретным разделам (задачам, finally)
    • Измеряются от начала первой задачи до завершения последней задачи
    • Приводят к сбою PipelineRun в случае превышения

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

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: build-deploy-with-timeout
    spec:
      pipelineRef:
        name: build-deploy-app
      timeouts:
        pipeline: "1h"
        tasks: "45m"
        finally: "15m"
      params:
        - name: image-name
          value: my-registry/my-app:latest

    ServiceAccount

    ServiceAccount позволяет указать учетную запись сервиса Kubernetes, используемую для аутентификации.

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

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

    Принципы

    ServiceAccounts:

    • Могут быть указаны на уровне PipelineRun для всех задач
    • Могут быть сопоставлены с конкретными задачами с помощью taskRunSpecs
    • Предоставляют учетные данные через секреты Kubernetes
    • Обеспечивают безопасный доступ к внешним ресурсам

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

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: build-deploy-with-service-account
    spec:
      pipelineRef:
        name: build-deploy-app
      taskRunTemplate:
        serviceAccountName: pipeline-service-account
      params:
        - name: image-name
          value: my-registry/my-app:latest

    TaskRunSpecs

    TaskRunSpecs позволяют настраивать конфигурации отдельных TaskRun в пределах PipelineRun.

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

    • Применение разных ServiceAccounts к различным задачам
    • Установка шаблонов пода для конкретных задач
    • Настройка тайм-аутов для конкретных задач
    • Применение вычислительных ресурсов для конкретных задач

    Принципы

    TaskRunSpecs:

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

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

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: build-deploy-with-taskrunspecs
    spec:
      pipelineRef:
        name: build-deploy-app
      taskRunSpecs:
        - pipelineTaskName: build
          serviceAccountName: build-service-account
          podTemplate:
            nodeSelector:
              disktype: ssd
        - pipelineTaskName: deploy
          serviceAccountName: deploy-service-account
          podTemplate:
            tolerations:
            - key: "dedicated"
              operator: "Equal"
              value: "deploy"
              effect: "NoSchedule"

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

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

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

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

    Принципы

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

    • Объявляются в Pipeline и привязываются в PipelineRun
    • Могут поддерживаться различными типами томов (PVC, ConfigMap, Secret и т.д.)
    • Позволяют обмен данными без прямых зависимостей
    • Поддерживают разные режимы доступа (ТолькоДляЧтения, ЧтениеИЗапись)

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

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: build-test-with-workspace
    spec:
      pipelineRef:
        name: build-test-pipeline
      workspaces:
        - name: source-code
          volumeClaimTemplate:
            spec:
              accessModes:
                - ReadWriteOnce
              resources:
                requests:
                  storage: 1Gi
        - name: cache
          persistentVolumeClaim:
            claimName: build-cache-pvc

    Управление статусом PipelineRun

    Мониторинг статуса выполнения

    Поле статуса PipelineRun предоставляет подробную информацию о прогрессе выполнения:

    status:
      completionTime: "2023-05-04T02:19:14Z"
      conditions:
        - lastTransitionTime: "2023-05-04T02:19:14Z"
          message: "Задачи завершены: 4, Пропущены: 0"
          reason: Успешно
          status: "True"
          type: Успешно
      startTime: "2023-05-04T02:00:11Z"
      childReferences:
      - name: build-deploy-app-run-build
        pipelineTaskName: build
        kind: TaskRun

    Отмена PipelineRun

    Чтобы отменить запущенный PipelineRun, обновите его поле spec.status:

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: build-deploy-app-run
    spec:
      # [...другие поля...]
      status: "Отменено"

    Это немедленно завершает все выполняющиеся TaskRuns и не выполняет ожидающие задачи или задачи finally.

    Корректная остановка PipelineRun

    Чтобы корректно остановить PipelineRun, позволяя выполнять задачи finally:

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: build-deploy-app-run
    spec:
      # [...другие поля...]
      status: "ОстановленоВыполнитьНаконец"

    Это завершит текущие выполняющиеся задачи, но не запустит новые, за исключением задач finally.

    Ссылки