• Русский
  • Запуск Pipeline с ScheduledTrigger

    TIP

    Для ознакомления с архитектурой, мотивацией и основами дизайна ScheduledTrigger смотрите страницу ScheduledTrigger Concepts.

    Обзор

    ScheduledTrigger позволяет выполнять TriggerTemplate по расписанию в стиле cron без необходимости использования входящих вебхуков. Каждый такт расписания рендерит шаблон, подставляет любые статические или временные параметры и создаёт определённые вами ресурсы Tekton (например, PipelineRuns). В этом руководстве показано, как подготовить необходимые условия, написать манифест и проверить автоматизацию от начала до конца.

    Поддерживаемые типы ресурсов

    В настоящее время ScheduledTrigger поддерживает следующие ресурсы Tekton Pipelines в TriggerTemplate:

    Рекомендация: используйте tekton.dev/v1 для следующих ресурсов; tekton.dev/v1beta1 всё ещё принимается, но устарел и будет удалён в будущих релизах.

    Тип ресурсаОписание
    PipelineRunЭкземпляр запуска Pipeline
    TaskRunЭкземпляр запуска Task

    Типичный рабочий процесс

    1. Убедитесь, что TriggerTemplate, который вы хотите запускать периодически, готов (повторно используемая ссылка или встроенная спецификация).
    2. Определите расписание, часовой пояс и любые контекстные параметры, необходимые для автоматизации.
    3. Создайте манифест ScheduledTrigger, который связывает шаблон с расписанием.
    4. Примените манифест и отслеживайте статус/события ресурса, чтобы убедиться, что запуски происходят.

    Базовая структура манифеста

    apiVersion: tekton.alaudadevops.io/v1alpha1
    kind: ScheduledTrigger
    metadata:
      name: nightly-security-scan
    spec:
      schedule: "0 2 * * *"                # Cron-выражение
      timeZone: "Asia/Shanghai"            # Необязательно, по умолчанию часовой пояс контроллера
      params:                               # Необязательно, статические/контекстные параметры
        - name: scan_date
          value: "$(context.date)"
        - name: severity
          value: "high"
      triggerTemplate:
        ref: security-scan-template         # Ссылка на существующий TriggerTemplate

    Пошаговая настройка

    1. Выберите расписание и часовой пояс

    • Используйте стандартный синтаксис cron (минуты часы день-месяца месяц день-недели). Пример: 15 1 * * 1-5 — запуск в 01:15 с понедельника по пятницу.
    • Укажите spec.timeZone строкой Olson (например, Europe/Paris). Если не указано, контроллер использует свой часовой пояс.
    • Предпочитайте явное указание часового пояса, если рабочие часы отличаются от часового пояса кластера или важны переходы на летнее/зимнее время.

    2. Укажите TriggerTemplate

    Вы можете ссылаться на повторно используемый шаблон через spec.triggerTemplate.ref или встроить полный шаблон в spec.triggerTemplate.spec. Ссылки позволяют синхронизировать несколько ScheduledTrigger, а встроенные спецификации делают каждый манифест автономным.

    3. Передайте параметры

    • Используйте spec.params для передачи статических значений в шаблон ($(tt.params.<name>)). Контекстные плейсхолдеры (например, $(context.date) и $(context.datetime)) допустимы только в этом разделе.
    • Комбинируйте эти плейсхолдеры с собственными параметрами для генерации детерминированных имён запусков, тегов или разделов отчётов, затем ссылайтесь на них внутри шаблона как $(tt.params.<name>).
    • Поскольку параметры Tekton Trigger — это строки, сериализуйте сложные объекты (например, JSON) перед передачей.

    4. Примените манифест

    # Замените namespace и имя файла с манифестом ScheduledTrigger
    kubectl -n <namespace> apply -f <scheduled-trigger-file>

    Укажите namespace, в котором находится TriggerTemplate. RBAC Kubernetes должен разрешать контроллеру разрешать и выполнять этот шаблон.

    5. Проверьте ресурс

    # Замените имя ScheduledTrigger и namespace
    kubectl get scheduledtrigger <scheduled-trigger-name> -n <namespace>
    # NAME                    AGE
    # nightly-security-scan   10s
    
    # Замените имя ScheduledTrigger и namespace
    kubectl describe scheduledtrigger <scheduled-trigger-name> -n <namespace>
    # Status:
    #   Last Schedule Time:  2025-11-25T07:42:00Z
    # Events:
    #   Type    Reason     Age      From               Message
    #   ----    ------     ----     ----               -------
    #   Normal  Scheduled  5s       scheduled-trigger  Scheduled security-scan-template for 2025-11-25T07:42:00Z

    Проверьте столбец LAST SCHEDULETIME (или поле .status.lastScheduleTime), чтобы убедиться, что контроллер срабатывает. События Kubernetes, отображаемые через kubectl describe, покажут успешные запуски или ошибки планирования (например, неверные cron-выражения или отсутствующие шаблоны).

    Если запуски не начинаются, как ожидалось, ознакомьтесь с руководством по устранению неполадок ScheduledTrigger для подробного анализа.

    Управление ScheduledTrigger со временем

    • Обновление расписания: отредактируйте ресурс (kubectl edit или примените новый манифест), чтобы изменить spec.schedule или spec.timeZone. Следующий такт пересчитается автоматически.
    • Обновление параметров: измените spec.params для обновления статических значений, таких как имена окружений, флаги функций или получатели.
    • Смена шаблонов: укажите новый шаблон в spec.triggerTemplate.ref или обновите встроенную спецификацию. Последующие запуски сразу будут использовать новую логику.
    • Пауза или удаление: удалите ScheduledTrigger, чтобы остановить будущие запуски. Позже можно создать его заново с тем же именем для возобновления расписания.

    Пример встроенного шаблона

    apiVersion: tekton.alaudadevops.io/v1alpha1
    kind: ScheduledTrigger
    metadata:
      name: refresh-demo-data
    spec:
      schedule: "0 */6 * * *"
      params:
        - name: run_timestamp
          value: "$(context.datetime)"
      triggerTemplate:
        spec:
          params:
            - name: target_cluster
              default: "demo"
            - name: run_timestamp
              description: Timestamp passed from ScheduledTrigger
          resourcetemplates:
            - apiVersion: tekton.dev/v1
              kind: PipelineRun
              metadata:
                generateName: refresh-demo-
              spec:
                pipelineRef:
                  name: refresh-pipeline
                params:
                  - name: cluster
                    value: "$(tt.params.target_cluster)"
                  - name: timestamp
                    value: "$(tt.params.run_timestamp)"

    Пример с учётом часового пояса для еженедельного запуска

    apiVersion: tekton.alaudadevops.io/v1alpha1
    kind: ScheduledTrigger
    metadata:
      name: monday-report
    spec:
      schedule: "0 9 * * 1"
      timeZone: "America/New_York"
      params:
        - name: report_date
          value: "$(context.date)"
      triggerTemplate:
        ref: weekly-report-template

    Ссылки