• Русский
  • StepActions

    StepAction — это переиспользуемая и скриптуемая единица работы, выполняемая в Step в Tekton Pipelines. StepActions позволяют определять контейнеризированные операции, которые могут быть использованы и переиспользованы в разных Tasks.

    Зачем нужны StepActions

    Традиционные проблемы с Tasks

    До появления StepActions Tasks сталкивались с рядом ограничений:

    • Переиспользуемость: Steps, определённые внутри Tasks, было сложно извлечь и использовать повторно
    • Поддерживаемость: Общая логика шагов дублировалась в разных Tasks
    • Версионирование: Трудно было отдельно контролировать версии отдельных шагов вне Tasks
    • Согласованность: Сложно было обеспечить единообразную реализацию общих операций

    Решение Tekton

    StepActions решают эти проблемы за счёт:

    • Переиспользуемости на уровне шагов: Инкапсуляция общих операций в переиспользуемые компоненты
    • Декларативного определения: Определение StepActions как Kubernetes Custom Resources
    • Параметризации: Приём параметров для настройки поведения
    • Выдачи результатов: Генерация результатов, которые могут использоваться другими шагами
    • Управления ресурсами: Определение требований к ресурсам отдельно от Tasks

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

    • Модульность: Разбиение сложных операций на переиспользуемые компоненты
    • Согласованность: Обеспечение идентичной реализации общих операций в разных Tasks
    • Поддерживаемость: Обновление StepAction один раз приносит пользу всем ссылающимся Tasks
    • Ясность: Разделение определения того, что делать (StepAction), и когда делать (Step)
    • Версионирование: Независимый контроль версий StepActions и Tasks

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

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

    • Общие операции: Git clone, сборка образов, сканирование безопасности
    • Стандартизированные инструменты: Линтеры, форматтеры, тестовые раннеры
    • Логика, специфичная для организации: Кастомные процедуры деплоя, процессы утверждения
    • Общие утилиты: Генерация версий, валидация конфигураций
    • Интеграционные компоненты: Взаимодействие с сервисами, операции с API

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

    • StepActions можно использовать только внутри Steps
    • Нельзя передавать результаты Step между Steps
    • Параметры нельзя использовать напрямую в скриптах (только через переменные окружения)
    • StepActions не могут запускаться автономно (в отличие от TaskRuns или PipelineRuns)
    • Требуется включённый флаг функции enable-step-actions со значением "true"

    Принципы

    Модель выполнения StepAction

    Когда Step ссылается на StepAction:

    1. Step предоставляет необходимый контекст и параметры
    2. StepAction определяет образ контейнера и логику выполнения
    3. Step может переопределять некоторые параметры, например ресурсы и таймаут
    4. Ссылаемый StepAction выполняет свои команды или скрипт
    5. Результаты StepAction могут использоваться последующими шагами

    Модель ссылок

    StepActions не являются компонентами Steps. Вместо этого:

    • Step — это исполняемый компонент, который может ссылаться на StepAction
    • Step обеспечивает оркестрацию и контекст
    • StepAction предоставляет переиспользуемую логику
    • Step может ссылаться на локальные или удалённые StepActions

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

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

    apiVersion: tekton.dev/v1beta1
    kind: StepAction
    metadata:
      name: git-clone
    spec:
      params:
        - name: url
          type: string
        - name: revision
          type: string
          default: "main"
        - name: depth
          type: string
          default: "1"
      results:
        - name: commit
          description: Коммит SHA, который был выкачан
      image: alpine/git
      script: |
        git clone --depth $(params.depth) --branch $(params.revision) $(params.url) /workspace
        cd /workspace
        echo -n $(git rev-parse HEAD) > $(results.commit.path)

    Ссылка на StepAction в Task

    apiVersion: tekton.dev/v1
    kind: Task
    metadata:
      name: build-with-git
    spec:
      workspaces:
        - name: source
      params:
        - name: repo-url
          type: string
      steps:
        - name: clone
          ref:
            name: git-clone
          params:
            - name: url
              value: $(params.repo-url)
            - name: revision
              value: main
          workingDir: $(workspaces.source.path)
        - name: build
          image: golang
          workingDir: $(workspaces.source.path)
          script: |
            go build -o app .

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

    Параметры

    Параметры позволяют настраивать StepActions при их использовании в Steps.

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

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

    Принципы

    Параметры в StepActions:

    • Объявляются в спецификации StepAction
    • Могут иметь значения по умолчанию
    • Передаются из ссылающегося Step
    • Поддерживают типы string, array и object
    • Не могут использоваться напрямую в скриптах (следует использовать через переменные окружения)

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

    apiVersion: tekton.dev/v1beta1
    kind: StepAction
    metadata:
      name: image-builder
    spec:
      params:
        - name: image
          type: object
          properties:
            name:
              type: string
            tag:
              type: string
        - name: context
          type: string
          default: "."
      image: podman
      env:
        - name: IMAGE_NAME
          value: $(params.image.name)
        - name: IMAGE_TAG
          value: $(params.image.tag)
      script: |
        podman build -t $IMAGE_NAME:$IMAGE_TAG $(params.context)

    Результаты

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

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

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

    Принципы

    Результаты:

    • Объявляются в спецификации StepAction
    • Записываются в определённый файл StepAction
    • Доступны для последующих Steps или Tasks

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

    apiVersion: tekton.dev/v1beta1
    kind: StepAction
    metadata:
      name: version-generator
    spec:
      results:
        - name: version
          description: Сгенерированная семантическая версия
        - name: build-id
          description: Уникальный идентификатор сборки
      image: alpine
      script: |
        VERSION="1.0.$(date +%s)"
        echo -n $VERSION > $(results.version.path)
        echo -n "build-$RANDOM-$RANDOM" > $(results.build-id.path)

    WorkingDir

    WorkingDir позволяет указать рабочую директорию для StepAction.

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

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

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

    apiVersion: tekton.dev/v1beta1
    kind: StepAction
    metadata:
      name: file-processor
    spec:
      workingDir: /workspace
      image: ubuntu
      script: |
        ls -la
        find . -name "*.txt" -exec cat {} \;

    SecurityContext

    SecurityContext позволяет настроить параметры безопасности для StepAction.

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

    • Настройка прав контейнера
    • Определение user и group ID
    • Управление ограничениями безопасности

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

    apiVersion: tekton.dev/v1beta1
    kind: StepAction
    metadata:
      name: secure-operation
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 1000
        allowPrivilegeEscalation: false
      image: ubuntu
      script: |
        echo "Running as $(id -u)"

    VolumeMounts

    VolumeMounts позволяют StepActions получить доступ к внешнему хранилищу.

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

    • Доступ к конфигурационным файлам
    • Хранение постоянных данных
    • Обмен информацией между шагами

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

    apiVersion: tekton.dev/v1beta1
    kind: StepAction
    metadata:
      name: config-reader
    spec:
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config
      image: ubuntu
      script: |
        cat /etc/config/settings.json

    When Expressions

    When Expressions позволяют контролировать, должен ли выполняться Step, ссылающийся на StepAction.

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

    • Условное выполнение на основе параметров
    • Пропуск шагов при отсутствии workspace
    • Управление потоком работы на основе результатов предыдущих шагов

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

    apiVersion: tekton.dev/v1
    kind: Task
    metadata:
      name: conditional-task
    spec:
      params:
        - name: run-tests
          type: string
          default: "true"
      steps:
        - name: test-runner
          ref:
            name: run-tests
          when:
            - input: "$(params.run-tests)"
              operator: in
              values: ["true"]

    Удалённые StepActions

    StepActions могут ссылаться на удалённые ресурсы, например git-репозитории.

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

    • Централизованное управление StepActions
    • Контроль версий StepActions
    • Совместное использование StepActions между организациями

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

    apiVersion: tekton.dev/v1
    kind: TaskRun
    metadata:
      name: remote-stepaction-run
    spec:
      taskSpec:
        steps:
          - name: remote-action
            ref:
              resolver: git
              params:
                - name: url
                  value: https://github.com/organization/stepactions.git
                - name: revision
                  value: main
                - name: pathInRepo
                  value: actions/my-action.yaml

    Ссылки