Распространённые проблемы
Это руководство по устранению неполадок охватывает проблемы как у администраторов (развертывание компонентов, конфигурация), так и у обычных пользователей (настройка репозитория, выполнение pipeline).
Важно: В этом документе мы используем два разных namespace:
<pac-namespace>: namespace, в котором развернуты компоненты PAC (controller, watcher, webhook). По умолчанию используетсяtekton-pipelines, но его можно изменить черезtargetNamespaceв CROpenShiftPipelinesAsCode.<namespace>: namespace, в котором создаются PipelineRun. Он указывается при создании CR Repository и может быть любым namespace в вашем кластере.
Замените эти заполнители на фактические имена ваших namespace.
В этом документе приведены шаги по устранению распространённых проблем, возникающих при использовании Pipelines-as-Code (PAC).
Содержание
Перед началом1. Проверьте, что компоненты PAC запущены2. Определите ваши namespace3. Получите имена ресурсов4. Распространённые заполнители, используемые в этом документеКомпонент PAC не разворачиваетсяСимптомШаги по устранению неполадокРаспространённые причиныРешениеPods PAC не запускаютсяСимптомШаги по устранению неполадокWebhook не получает событияСимптомШаги по устранению неполадокРаспространённые причиныРешениеПроверкаPipeline не запускаетсяСимптомШаги по устранению неполадокРаспространённые причиныРешениеПроверкаPipelineRun не создаютсяСимптомШаги по устранению неполадокРаспространённые причиныРешениеПроверкаTasks не найденыСимптомШаги по устранению неполадокРаспространённые причиныРешениеПеременные не разрешаютсяСимптомШаги по устранению неполадокРаспространённые причиныРешениеПроверкаСтатус не отправляется в GitLabСимптомШаги по устранению неполадокРаспространённые причиныРешениеПроверкаКоманды в комментариях не работаютСимптомШаги по устранению неполадокРаспространённые причиныРешениеПолучение помощиСледующие шагиПеред началом
Прежде чем приступать к устранению конкретных проблем, проверьте следующие базовые вещи:
1. Проверьте, что компоненты PAC запущены
Убедитесь, что все pods PAC находятся в состоянии Running (замените <pac-namespace> на ваш namespace PAC, по умолчанию tekton-pipelines):
Пример вывода (все pods должны быть в состоянии Running):
2. Определите ваши namespace
Получить namespace PAC (где развернуты компоненты PAC):
Если команда завершается с ошибкой или возвращает пустое значение, используйте значение по умолчанию: tekton-pipelines
Получить namespace Pipeline (где создаются PipelineRun):
Эта команда показывает все CR Repository и их namespace. Столбец namespace показывает, где будут создаваться PipelineRun.
3. Получите имена ресурсов
Получить имена pods:
Получить имена CR Repository:
Получить имена PipelineRun:
4. Распространённые заполнители, используемые в этом документе
<pac-namespace>: namespace развертывания PAC (по умолчанию:tekton-pipelines)<namespace>: namespace PipelineRun (зависит от repository)<repo-name>: имя CR Repository (используйтеkubectl get repository -n <namespace>для списка)<pod-name>: имя pod (используйтеkubectl get pods -n <pac-namespace>для списка)<name>: имя PipelineRun (используйтеkubectl get pipelinerun -n <namespace>для списка)<gitlab-secret>: имя secret токена GitLab (проверьте spec CR Repository)
Компонент PAC не разворачивается
Симптом
CR OpenShiftPipelinesAsCode показывает Ready: False, или pods не запускаются.
Шаги по устранению неполадок
-
Проверьте статус CR:
Пример вывода (сокращённо):
-
Проверьте события CR:
Пример вывода (сокращённо):
-
Проверьте TektonInstallerSet:
Примечание:
TektonInstallerSet— это ресурс уровня кластера. Для диагностики выполняйте только проверку на чтение. Не изменяйте и не удаляйте его напрямую. Если проблема сохраняется, выполняйте диагностику через CROpenShiftPipelinesAsCode.
Пример вывода:
-
Проверьте логи Operator:
Пример вывода (пример записей журнала):
Распространённые причины
- Неверное имя CR: должно быть строго
pipelines-as-code - Operator не запущен: проверьте статус Tekton Operator
- Проблемы с namespace: убедитесь, что
targetNamespaceсуществует - Конфликт ресурсов: проверьте наличие существующих ресурсов
Решение
- Убедитесь, что имя CR —
pipelines-as-code - Убедитесь, что Tekton Operator запущен
- Проверьте, что namespace существует (замените
<pac-namespace>на фактический namespace PAC):kubectl get namespace <pac-namespace> - При необходимости удалите и создайте CR заново
Pods PAC не запускаются
Симптом
Pods PAC находятся в состоянии Pending или CrashLoopBackOff.
Шаги по устранению неполадок
-
Проверьте статус pod (замените
<pac-namespace>на ваш namespace PAC):
Пример вывода:
-
Проверьте логи pod:
Сначала получите имя pod (замените
<pac-namespace>на ваш namespace PAC):Затем проверьте логи (замените
<pod-name>на фактическое имя pod):
Пример вывода (пример ошибки):
-
Проверьте события pod:
Сначала получите имя pod, затем выполните его описание (замените
<pod-name>на фактическое имя pod):
Пример вывода (сокращённо):
-
Проверьте ограничения ресурсов:
Пример вывода:
Webhook не получает события
Симптом
События webhook GitLab не доходят до PAC, pipeline не запускаются.
Шаги по устранению неполадок
-
Проверьте конфигурацию webhook в GitLab:
- Перейдите в GitLab project → Settings → Webhooks
- Убедитесь, что URL webhook указан правильно
- Проверьте, что secret webhook совпадает с CR Repository
-
Проверьте логи controller PAC (замените
<pac-namespace>на ваш namespace PAC):
Пример вывода (пример записей журнала):
-
Проверьте webhook из GitLab:
- Перейдите в GitLab project → Settings → Webhooks
- Нажмите "Test" → "Push events"
- Проверьте ответ webhook
-
Проверьте доступность URL controller:
Пример вывода:
Пример вывода:
-
Проверьте CR Repository:
Сначала перечислите все CR Repository, чтобы найти имя (замените
<namespace>на ваш namespace Pipeline):Затем проверьте конкретный CR Repository (замените
<repo-name>на фактическое имя repository):
Пример вывода (сокращённо):
Распространённые причины
- URL controller недоступен: проблемы с firewall или сетью
- Несовпадение secret webhook: secret в GitLab не совпадает с CR Repository
- Неверный URL webhook: указан неправильный URL controller
- Ingress/Service не настроены: controller не опубликован наружу
Решение
- Убедитесь, что URL controller доступен с серверов GitLab
- Проверьте, что secret webhook совпадает в GitLab и в CR Repository
- Проверьте конфигурацию Ingress/Service
- Выполните ручную проверку webhook с помощью
curl
Проверка
После применения решений проверьте исправление:
-
Проверьте webhook из GitLab:
- Перейдите в GitLab project → Settings → Webhooks
- Нажмите "Test" → "Push events"
- Убедитесь, что webhook возвращает ответ
200 OK
-
Проверьте логи controller PAC на наличие событий webhook:
Вы должны увидеть записи журнала, указывающие на то, что события webhook принимаются.
Pipeline не запускается
Симптом
Pipeline не создаются при возникновении событий Git.
Шаги по устранению неполадок
-
Проверьте аннотации Pipeline:
Пример вывода:
-
Проверьте, что имена веток совпадают:
Пример вывода:
-
Проверьте логи controller PAC:
Пример вывода (пример записей журнала):
-
Проверьте статус CR Repository:
Сначала перечислите CR Repository, чтобы найти имя:
Затем проверьте CR Repository (замените
<repo-name>на фактическое имя repository):
Пример вывода (сокращённо):
-
Проверьте наличие файла Pipeline:
Пример вывода:
Распространённые причины
- Ошибка синтаксиса аннотации: неверный формат аннотации
- Несовпадение имени ветки: шаблон ветки не совпадает с фактической веткой
- Файл Pipeline не найден: файл находится не в ожидаемом месте
- Фильтрация по пути: изменённые файлы не соответствуют фильтру пути
- CR Repository не найден: для repository нет соответствующего CR Repository
Решение
- Проверьте синтаксис аннотаций: используйте
pipelinesascode.tekton.dev/on-target-branch: "[refs/heads/main]"иpipelinesascode.tekton.dev/on-event: "[push]"вместо устаревшей аннотацииon-push - Убедитесь, что имена веток совпадают точно (с учётом регистра)
- Убедитесь, что
.tekton/pipelinerun.yamlсуществует в repository - Проверьте фильтрацию по пути, если она настроена
- Убедитесь, что CR Repository существует и соответствует URL repository
Проверка
После применения решений проверьте исправление:
-
Запустите тестовое событие:
- Отправьте commit в ветку, указанную в аннотации Pipeline
- Или создайте Merge Request, если тестируете триггеры MR
-
Проверьте, что PipelineRun создан:
После события Git должен появиться новый PipelineRun.
-
Проверьте логи controller PAC:
Найдите записи журнала, указывающие на обработку события.
PipelineRun не создаются
Симптом
События webhook принимаются, но PipelineRun не создаются.
Шаги по устранению неполадок
-
Проверьте логи controller PAC:
Пример вывода (пример ошибки):
-
Проверьте CR Repository:
Сначала перечислите CR Repository, чтобы найти имя:
Затем проверьте CR Repository (замените
<repo-name>на фактическое имя repository):
Пример вывода (сокращённо):
-
Проверьте, что namespace существует:
Пример вывода:
Если namespace не существует, вы увидите:
-
Проверьте права RBAC:
Пример вывода:
-
Проверьте токен GitLab:
Сначала найдите имя secret в CR Repository:
Затем проверьте secret (замените
<gitlab-secret>на фактическое имя secret):
Пример вывода (сокращённо, token закодирован в base64):
Распространённые причины
- Namespace не существует: целевой namespace не создан
- Права RBAC: у ServiceAccount PAC нет необходимых прав
- Недействительный токен GitLab: токен истёк или указан неверно
- Ошибка определения Pipeline: недопустимый YAML или синтаксис Tekton
- Доступ к repository: невозможно получить доступ к Git repository
Решение
-
Создайте namespace, если он отсутствует:
Пример вывода:
-
Проверьте RBAC: проверьте ServiceAccount и RoleBindings
Проверьте, какой ServiceAccount использует PAC:
Проверьте, есть ли у ServiceAccount необходимые права:
-
Обновите токен GitLab, если он истёк
-
Проверьте синтаксис YAML pipeline
-
Проверьте токен GitLab:
Пример вывода (если token действителен):
Если token недействителен:
Проверка
После применения решений проверьте исправление:
-
Запустите событие Git (push или создание MR) и проверьте, что PipelineRun создан:
-
Проверьте статус PipelineRun:
PipelineRun должен быть создан и начать выполнение.
Tasks не найдены
Симптом
PipelineRun завершается с ошибкой "task not found".
Шаги по устранению неполадок
-
Проверьте статус PipelineRun:
Сначала перечислите PipelineRun, чтобы найти имя:
Затем проверьте PipelineRun (замените
<name>на фактическое имя PipelineRun):
Пример вывода (сокращённо, с ошибкой):
-
Проверьте ссылки на Task:
Пример вывода:
-
Убедитесь, что Task существует:
Пример вывода (если task существует):
Если task не существует:
Пример вывода (если task существует):
-
Проверьте сетевую доступность:
Пример вывода (если доступно):
Пример вывода (если доступно):
Распространённые причины
- Неверное имя Task: опечатка в имени task
- Task не в этом namespace: task определён в другом namespace
- Tekton Hub недоступен: проблемы с сетью при доступе к Tekton Hub
- Удалённый URL недоступен: невозможно получить task из удалённого URL
- Ошибка resolver: неверная конфигурация resolver
Решение
- Проверьте правильность написания имени task
- Убедитесь, что task существует в правильном namespace
- Проверьте подключение к Tekton Hub
- Убедитесь, что удалённые URL доступны
- Проверьте конфигурацию resolver для task
Переменные не разрешаются
Симптом
Переменные pipeline, такие как {{revision}}, не заменяются.
Шаги по устранению неполадок
-
Проверьте синтаксис переменных:
Пример вывода:
-
Проверьте синтаксис YAML с помощью dry-run:
Используйте
kubectl apply --dry-run=client, чтобы проверить синтаксис YAML PipelineRun и заранее выявить ошибки:
Пример вывода (если синтаксис корректен):
Пример вывода (если есть ошибки синтаксиса):
Примечание: Эта проверка dry-run валидирует синтаксис YAML и схему Tekton, но не проверяет разрешение переменных (переменные вроде {{revision}} в dry-run останутся в виде строковых литералов). Для проблем с разрешением переменных проверьте логи controller PAC.
-
Проверьте логи controller PAC:
Пример вывода (пример записей журнала):
-
Проверьте имена переменных:
{{revision}}— правильно{{Revision}}или{{REVISION}}— неправильно (чувствительно к регистру)- Используйте двойные фигурные скобки:
{{variable_name}}
-
Проверьте параметры PipelineRun:
Сначала получите имя PipelineRun:
Затем проверьте параметры (замените
<name>на фактическое имя PipelineRun):
Пример вывода:
Распространённые причины
- Ошибка синтаксиса: отсутствуют фигурные скобки или указан неверный формат
- Чувствительность к регистру: имена переменных чувствительны к регистру
- Переменная недоступна: переменная недоступна для текущего типа события (например,
{{pull_request_number}}доступна только для событийpull_request) - Версия PAC: более старая версия PAC может не поддерживать некоторые переменные
Решение
- Проверьте синтаксис переменных: используйте формат
{{variable_name}}, например{{revision}}или{{repo_url}} - Убедитесь, что имена переменных указаны правильно (с учётом регистра):
{{repo_owner}},{{source_branch}},{{pull_request_number}} - Убедитесь, что переменная доступна для типа события: некоторые переменные, например
{{pull_request_number}}, доступны только для событийpull_request - При необходимости обновите PAC до последней версии
Полный список доступных переменных см. в Параметризация commit и URL.
Проверка
После применения решений проверьте исправление:
-
Проверьте, что переменные разрешены в созданном PipelineRun:
Переменные должны быть заменены фактическими значениями (например,
{{revision}}должен быть заменён на SHA commit). -
Проверьте логи controller PAC на наличие разрешения переменных:
Не должно быть предупреждений о неизвестных переменных.
Статус не отправляется в GitLab
Симптом
Pipeline успешно выполняются, но статус не отображается в GitLab.
Шаги по устранению неполадок
-
Проверьте логи watcher PAC:
Пример вывода (пример записей журнала):
-
Проверьте токен GitLab:
Сначала найдите имя secret в CR Repository:
Затем проверьте secret (замените
<gitlab-secret>на фактическое имя secret):
Пример вывода (сокращённо, token закодирован в base64):
-
Проверьте доступ к GitLab API:
Пример вывода (если token действителен):
Если token недействителен или истёк:
-
Проверьте CR Repository:
Пример вывода (сокращённо):
-
Проверьте статус PipelineRun:
Перечислите PipelineRun, чтобы найти имя:
Затем проверьте статус (замените
<name>на фактическое имя PipelineRun):
Пример вывода:
Распространённые причины
- Недействительный токен GitLab: токен истёк или указан неверно
- Права токена: у токена нет необходимых scopes
- Проблемы с сетью: невозможно достичь GitLab API
- PAC Watcher не запущен: pod watcher не работает
- Неверная конфигурация CR Repository: некорректная настройка GitLab
Решение
- Убедитесь, что токен GitLab действителен и не истёк
- Убедитесь, что у токена есть scope
api - Проверьте доступность GitLab API
- Убедитесь, что pod PAC Watcher запущен
- Проверьте конфигурацию GitLab в CR Repository
Проверка
После применения решений проверьте исправление:
-
Проверьте логи PAC Watcher на успешную отправку статуса:
Вы должны увидеть записи журнала, указывающие на успешную отправку обновлений статуса.
-
Проверьте UI GitLab:
- Перейдите в ваш проект GitLab
- Проверьте Merge Request или commit
- Убедитесь, что отображается статус pipeline (например, "passed", "failed", "running")
-
Проверьте, что PipelineRun завершился:
PipelineRun должен иметь статус
SucceededилиFailed, и этот статус должен отображаться в GitLab.
Команды в комментариях не работают
Симптом
Команды комментариев, такие как /retest, не запускают pipeline.
Шаги по устранению неполадок
-
Проверьте конфигурацию аннотации:
Пример вывода:
-
Проверьте формат комментария:
- Команды должны находиться на отдельной строке или в начале строки
/retest— правильноPlease /retest— неправильно (команда не в начале строки)
-
Проверьте логи controller PAC:
Пример вывода (пример записей журнала):
-
Проверьте, что Merge Request существует:
- Команды комментариев работают только в Merge Requests
- Для обычных commit они недоступны
-
Проверьте конфигурацию webhook:
Распространённые причины
- Отсутствует аннотация: аннотация
on-commentне настроена - Формат команды: команда не в начале строки
- Не в Merge Request: команды комментариев работают только в Merge Requests
- Webhook не настроен: событие Comments не включено в webhook
- Несовпадение имени команды: команда в комментарии не совпадает с аннотацией
Решение
- Добавьте аннотацию
on-comment:pipelinesascode.tekton.dev/on-comment: "retest" - Убедитесь, что команды находятся в начале строки
- Используйте команды только в Merge Requests
- Включите "Comments" в конфигурации webhook GitLab
- Точно совпадайте с именем команды (с учётом регистра)
Получение помощи
Если проблема по-прежнему сохраняется:
- Просмотрите логи: проверьте логи всех компонентов на наличие ошибок
- Проверьте конфигурацию: ещё раз проверьте все файлы конфигурации
- Проверьте документацию: изучите документацию PAC в этом руководстве
- Просмотрите разделы по устранению неполадок: проверьте другие разделы troubleshooting в этом документе
Следующие шаги
- Управление компонентом PAC — руководство по развертыванию и управлению
- Настройка Repository — руководство по настройке repository
- Запуск pipeline — руководство по настройке триггеров