ScheduledTrigger не срабатывает по расписанию
Содержание
Описание проблемыАнализ причинИсследование проблемыПроверка расписания и часового поясаПроверка ссылки на TriggerTemplateПроверка событий на ошибки применения или прав доступаДополнительные советыОписание проблемы
После создания ScheduledTrigger не появляется ни один PipelineRun (или другие ресурсы внутри TriggerTemplate) в ожидаемое время.
Анализ причин
Распространённые причины включают:
- Неверное cron-выражение или необязательное поле
timeZone, либо следующий запуск ещё не наступил в ожидаемом часовом поясе. - Ссылка на
TriggerTemplate(или встроенное содержимое шаблона) не может быть разрешена, часто из-за неправильного имени/пространства имён или отсутствия прав. - Рендеринг проходит успешно, но создание ресурсов Tekton не удаётся из-за проблем с RBAC или ошибок валидации шаблона.
Подробное описание каждого поля спецификации ScheduledTrigger смотрите в ScheduledTrigger API и Важные пояснения параметров.
Исследование проблемы
Всегда начинайте с:
В разделе Events могут быть предупреждения, такие как UnknownTimeZone, UnparseableSchedule, InvalidSchedule, UnknownTriggerTemplate или FailedCreate. Используйте эти типы событий, чтобы выбрать правильное решение из разделов ниже.
Выполните следующие проверки, чтобы сузить круг проблемы:
Проверка расписания и часового пояса
- Проверьте расписание командой
kubectl get scheduledtrigger <name> -n <namespace> -o jsonpath='{.spec.schedule}'и убедитесь, что оно соответствует нужному cron-выражению (минуты часы день-месяца месяц день-недели). - Если задано
spec.timeZone, убедитесь, что это корректный часовой пояс (например,Asia/Shanghai). Опечатки вызывают предупрежденияUnknownTimeZoneи пропуск запусков. При ошибках синтаксиса cron контроллер создаёт событияUnparseableScheduleилиInvalidSchedule; исправьте выражение и примените заново. - Сравните
kubectl get scheduledtrigger <name> -n <namespace> -o jsonpath='{.status.lastScheduleTime}'с текущим временем, чтобы проверить, не просрочен ли последний запуск. Помните, что cron-выражения оцениваются в выбранном часовом поясе, а не по локальному времени пользователя.
Проверка ссылки на TriggerTemplate
- При использовании
spec.triggerTemplate.refубедитесь, что указанныйTriggerTemplateсуществует в том же namespace:kubectl get triggertemplate <ref> -n <namespace>. - Для встроенных шаблонов выполните
kubectl describe scheduledtrigger <name>и проверьте ошибки валидации, указывающие на отсутствующие поля внутриtriggerTemplate. - Убедитесь, что такие плейсхолдеры, как
$(context.datetime), используются только вspec.params. В отрендеренном шаблоне они должны ссылаться через$(tt.params.<name>); использование контекстных плейсхолдеров в других местах приводит к ошибкам рендеринга и предупреждениямUnknownTriggerTemplate.
Проверка событий на ошибки применения или прав доступа
- Выполните
kubectl describe scheduledtrigger <name> -n <namespace>и изучите раздел Events. Сообщения типаFailedCreate,ResourceApplyFailedили ошибки RBAC сforbiddenозначают, что контроллер пытался сработать, но был заблокирован. - Предупреждения
FailedCreateобычно означают, что Tekton отклонил отрендеренный ресурс. Изучите сообщение, исправьте шаблон и примените ScheduledTrigger заново. - Для изоляции проблем с шаблоном попробуйте создать
PipelineRunилиTaskRunнапрямую из содержимогоTriggerTemplate. Вручную замените все плейсхолдеры$(tt.params.<name>)на конкретные значения, примените ресурс и проверьте, создаётся ли он успешно.
Дополнительные советы
-
При отладке временно измените
spec.scheduleна запуск каждую минуту (например,*/1 * * * *), чтобы проверить, начнут ли выполняться запуски после изменений. -
Держите
ScheduledTriggerиTriggerTemplateв одном namespace, чтобы избежать путаницы с кросс-namespace ссылками. -
Используйте метку
tekton.alaudadevops.io/scheduled-trigger-nameдля вывода всех ресурсов, созданных ScheduledTrigger. Например:Замените
<scheduled-trigger-name>на имя вашего ресурса, чтобы увидеть все PipelineRun или TaskRun, созданные этим ScheduledTrigger.