Распространённые проблемы
Это руководство по устранению неполадок охватывает проблемы как для администраторов (развёртывание компонентов, конфигурация), так и для обычных пользователей (настройка репозитория, запуск pipeline).
Важно: В этом документе используются два разных namespace:
<pac-namespace>: namespace, в котором развёрнуты компоненты PAC (controller, watcher, webhook). По умолчанию этоtekton-pipelines, но значение можно изменить черезtargetNamespaceв CROpenShiftPipelinesAsCode.<namespace>: namespace, в котором создаются PipelineRuns. Он указывается при создании CR Repository и может быть любым namespace в вашем cluster.
Замените эти заполнители на фактические имена namespace.
В этом документе приведены шаги по устранению распространённых проблем, возникающих при использовании Pipelines-as-Code (PAC).
Содержание
Перед началом1. Проверьте, что компоненты PAC запущены2. Определите свои namespace3. Получите имена ресурсов4. Распространённые заполнители, используемые в этом документеКомпонент PAC не развёртываетсяСимптомШаги по устранению неполадокРаспространённые причиныРешениеPods PAC не запускаютсяСимптомШаги по устранению неполадокWebhook не получает событияСимптомШаги по устранению неполадокРаспространённые причиныРешениеПроверкаPipeline не запускаетсяСимптомШаги по устранению неполадокРаспространённые причиныРешениеПроверкаPipelineRuns не создаютсяСимптомШаги по устранению неполадокРаспространённые причиныРешениеПроверкаTasks не найденыСимптомШаги по устранению неполадокРаспространённые причиныРешениеПеременные не подставляютсяСимптомШаги по устранению неполадокРаспространённые причиныРешениеПроверкаСтатус не передаётся в GitLabСимптомШаги по устранению неполадокРаспространённые причиныРешениеПроверкаКоманды комментариев не работаютСимптомШаги по устранению неполадокРаспространённые причиныРешениеПолучение помощиДальнейшие шагиПеред началом
Прежде чем приступать к устранению конкретных проблем, проверьте эти базовые моменты:
1. Проверьте, что компоненты PAC запущены
Убедитесь, что все pods PAC запущены (замените <pac-namespace> на ваш namespace PAC, по умолчанию tekton-pipelines):
Пример вывода (все pods должны иметь состояние Running):
2. Определите свои namespace
Получите namespace PAC (где развёрнуты компоненты PAC):
Если команда завершается с ошибкой или возвращает пустой результат, используйте значение по умолчанию: tekton-pipelines
Получите namespace Pipeline (где создаются PipelineRuns):
Это покажет все CR Repository и их namespace. В столбце namespace указано, где будут создаваться PipelineRuns.
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— ресурс cluster-scoped. Это только проверка для чтения при устранении неполадок. Не изменяйте и не удаляйте его напрямую. Если проблема сохраняется, выполняйте диагностику через 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
-
Проверьте логи PAC Controller (замените
<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
-
Проверьте логи PAC Controller для событий webhook:
Вы должны увидеть записи журнала, указывающие, что события webhook принимаются.
Pipeline не запускается
Симптом
Pipeline не создаются при возникновении Git-событий.
Шаги по устранению неполадок
-
Проверьте аннотации Pipeline:
Пример вывода:
-
Убедитесь, что имена веток совпадают:
Пример вывода:
-
Проверьте логи PAC Controller:
Пример вывода (пример записей журнала):
-
Проверьте статус CR Repository:
Сначала перечислите CR Repository, чтобы найти имя:
Затем проверьте CR Repository (замените
<repo-name>на фактическое имя repository):
Пример вывода (сокращённый):
-
Проверьте, что файл Pipeline существует:
Пример вывода:
Распространённые причины
- Ошибка в синтаксисе аннотации: неверный формат аннотации
- Несовпадение имени ветки: шаблон ветки не соответствует фактической ветке
- Файл pipeline не найден: файл отсутствует в ожидаемом расположении
- Фильтрация по пути: изменённые файлы не соответствуют path filter
- 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 - Проверьте path filtering, если он настроен
- Убедитесь, что CR Repository существует и соответствует URL repository
Проверка
После применения решений проверьте исправление:
-
Запустите тестовое событие:
- Отправьте commit в ветку, указанную в аннотации pipeline
- Или создайте Merge Request, если тестируете триггеры MR
-
Проверьте, создан ли PipelineRun:
После Git-события должен быть создан новый PipelineRun.
-
Проверьте логи PAC Controller:
Найдите записи журнала, указывающие, что событие было обработано.
PipelineRuns не создаются
Симптом
События webhook принимаются, но PipelineRuns не создаются.
Шаги по устранению неполадок
-
Проверьте логи PAC Controller:
Пример вывода (пример ошибки):
-
Проверьте CR Repository:
Сначала перечислите CR Repository, чтобы найти имя:
Затем проверьте CR Repository (замените
<repo-name>на фактическое имя repository):
Пример вывода (сокращённый):
-
Убедитесь, что namespace существует:
Пример вывода:
Если namespace не существует, вы увидите:
-
Проверьте права RBAC:
Пример вывода:
-
Проверьте токен GitLab:
Сначала найдите имя secret в CR Repository:
Затем проверьте secret (замените
<gitlab-secret>на фактическое имя secret):
Пример вывода (сокращённый, токен закодирован в base64):
Распространённые причины
- Namespace не существует: целевой namespace не создан
- Права RBAC: ServiceAccount PAC не имеет необходимых прав
- Неверный токен GitLab: токен истёк или указан неверно
- Ошибка определения pipeline: некорректный YAML или синтаксис Tekton
- Доступ к repository: нет доступа к Git repository
Решение
-
Создайте namespace, если он отсутствует:
Пример вывода:
-
Проверьте RBAC: проверьте ServiceAccount и RoleBindings
Узнайте, какой ServiceAccount использует PAC:
Проверьте, есть ли у ServiceAccount необходимые права:
-
Обновите токен GitLab, если он истёк
-
Проверьте синтаксис YAML pipeline
-
Проверьте токен GitLab:
Пример вывода (если токен действителен):
Если токен недействителен:
Проверка
После применения решений проверьте исправление:
-
Запустите Git-событие (push или создание MR) и проверьте, создаётся ли PipelineRun:
-
Проверьте статус PipelineRun:
PipelineRun должен быть создан и начать выполнение.
Tasks не найдены
Симптом
PipelineRun завершается с ошибкой "task not found".
Шаги по устранению неполадок
-
Проверьте статус PipelineRun:
Сначала перечислите PipelineRuns, чтобы найти имя:
Затем проверьте PipelineRun (замените
<name>на фактическое имя PipelineRun):
Пример вывода (сокращённый, с ошибкой):
-
Проверьте ссылки на Task:
Пример вывода:
-
Убедитесь, что Task существует:
Пример вывода (если Task существует):
Если Task не существует:
Пример вывода (если Task существует):
-
Проверьте сетевую доступность:
Пример вывода (если доступно):
Пример вывода (если доступно):
Распространённые причины
- Неверное имя Task: опечатка в имени task
- Task не в этом namespace: Task определён в другом namespace
- Tekton Hub недоступен: проблемы с сетью при доступе к Tekton Hub
- Remote URL недоступен: невозможно получить task с remote URL
- Ошибка resolver: неверная конфигурация resolver
Решение
- Проверьте правильность имени task
- Убедитесь, что Task существует в правильном namespace
- Проверьте подключение к Tekton Hub
- Убедитесь, что remote URL доступен
- Проверьте конфигурацию task resolver
Переменные не подставляются
Симптом
Переменные pipeline, такие как {{revision}}, не заменяются.
Шаги по устранению неполадок
-
Проверьте синтаксис переменных:
Пример вывода:
-
Проверьте синтаксис YAML с dry-run:
Используйте
kubectl apply --dry-run=client, чтобы проверить синтаксис YAML PipelineRun и заранее выявить ошибки:
Пример вывода (если синтаксис корректен):
Пример вывода (если есть ошибки синтаксиса):
Примечание: Эта проверка dry-run валидирует синтаксис YAML и схему Tekton, но не проверяет подстановку переменных (переменные вроде {{revision}} останутся буквальными строками при dry-run). Для проблем с подстановкой переменных проверьте логи PAC controller.
-
Проверьте логи PAC Controller:
Пример вывода (пример записей журнала):
-
Проверьте имена переменных:
{{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). -
Проверьте логи PAC Controller на предмет подстановки переменных:
Не должно быть предупреждений о неизвестных переменных.
Статус не передаётся в GitLab
Симптом
Pipeline успешно выполняются, но статус не отображается в GitLab.
Шаги по устранению неполадок
-
Проверьте логи PAC Watcher:
Пример вывода (пример записей журнала):
-
Проверьте токен GitLab:
Сначала найдите имя secret в CR Repository:
Затем проверьте secret (замените
<gitlab-secret>на фактическое имя secret):
Пример вывода (сокращённый, токен закодирован в base64):
-
Проверьте доступ к API GitLab:
Пример вывода (если токен действителен):
Если токен недействителен или истёк:
-
Проверьте CR Repository:
Пример вывода (сокращённый):
-
Проверьте статус PipelineRun:
Перечислите PipelineRuns, чтобы найти имя:
Затем проверьте статус (замените
<name>на фактическое имя PipelineRun):
Пример вывода:
Распространённые причины
- Неверный токен GitLab: токен истёк или указан неверно
- Права токена: у token отсутствуют необходимые scopes
- Проблемы с сетью: невозможен доступ к API GitLab
- PAC Watcher не запущен: pod Watcher не работает
- CR Repository настроен неверно: неверная конфигурация GitLab
Решение
- Убедитесь, что токен GitLab действителен и не истёк
- Убедитесь, что у token есть scope
api - Проверьте доступность API GitLab
- Убедитесь, что pod PAC Watcher запущен
- Проверьте конфигурацию GitLab в CR Repository
Проверка
После применения решений проверьте исправление:
-
Проверьте логи PAC Watcher на наличие успешных обновлений статуса:
Вы должны увидеть записи журнала, указывающие, что обновления статуса были успешно отправлены.
-
Проверьте интерфейс GitLab:
- Перейдите в ваш GitLab project
- Проверьте Merge Request или commit
- Убедитесь, что статус pipeline отображается (например, "passed", "failed", "running")
-
Убедитесь, что PipelineRun завершился:
Для PipelineRun должен отображаться статус
SucceededилиFailed, и этот статус должен быть отражён в GitLab.
Команды комментариев не работают
Симптом
Команды комментариев, такие как /retest, не запускают pipeline.
Шаги по устранению неполадок
-
Проверьте конфигурацию аннотаций:
Пример вывода:
-
Проверьте формат комментария:
- Команды должны быть на отдельной строке или в начале строки
/retest- правильноPlease /retest- неправильно (команда не в начале строки)
-
Проверьте логи PAC Controller:
Пример вывода (пример записей журнала):
-
Убедитесь, что существует Merge Request:
- Команды комментариев работают только в Merge Request
- Для обычных commit они недоступны
-
Проверьте конфигурацию webhook:
Распространённые причины
- Аннотация отсутствует: аннотация
on-commentне настроена - Формат команды: команда не находится в начале строки
- Не в Merge Request: команды комментариев работают только в Merge Request
- Webhook не настроен: событие комментариев не включено в webhook
- Несовпадение имени команды: команда в комментарии не совпадает с аннотацией
Решение
- Добавьте аннотацию
on-comment:pipelinesascode.tekton.dev/on-comment: "retest" - Убедитесь, что команды находятся в начале строки
- Используйте команды только в Merge Request
- Включите "Comments" в конфигурации GitLab webhook
- Указывайте имена команд точно (с учётом регистра)
Получение помощи
Если проблемы по-прежнему сохраняются:
- Проверьте логи: просмотрите логи всех компонентов на наличие ошибок
- Проверьте конфигурацию: ещё раз проверьте все файлы конфигурации
- Изучите документацию: ознакомьтесь с документацией PAC в этом руководстве
- Проверьте разделы по устранению неполадок: изучите другие разделы этого документа
Дальнейшие шаги
- Управление компонентом PAC - руководство по развёртыванию и управлению
- Руководства - пошаговые инструкции по настройке repository
- Триггер pipeline - руководство по настройке триггеров