Troubleshooting¶
Типичные проблемы и их решения.
Build¶
Build fails: "No buildpack detected"¶
Buildpacks не смогли определить язык проекта.
Решение: Убедитесь что в корне проекта (или в path из .hive.yml) есть файл-маркер:
| Язык | Файл-маркер |
|---|---|
| Go | go.mod |
| Python | requirements.txt, setup.py, или Pipfile |
| Node.js | package.json |
| .NET | *.csproj или *.sln |
| Java | pom.xml или build.gradle |
Build fails: Docker daemon not available¶
Решение: hive build требует Docker daemon. В CI убедитесь что docker:27-dind указан как service. Локально — Docker Desktop должен быть запущен.
Build fails: Dockerfile не используется¶
Builder по умолчанию --- paketo. Даже если Dockerfile есть в директории, Hive не будет его использовать без явного указания:
Без этого Paketo анализирует файлы проекта и выбирает buildpack по файлам-маркерам (package.json, go.mod, nginx.conf и т.д.). Dockerfile полностью игнорируется.
Build fails: Paketo выбирает неправильный buildpack¶
Причина: Paketo определяет тип проекта по формальным признакам — наличию файлов. Если в проекте есть nginx.conf (даже если он предназначен для COPY в Dockerfile), Paketo использует nginx buildpack и трактует его как основной конфиг nginx. Аналогично, package.json для тулинга может запустить Node.js buildpack.
Типичные конфликты:
| Файл в проекте | Paketo думает | На самом деле |
|---|---|---|
nginx.conf |
nginx static site | COPY внутри Dockerfile |
package.json |
Node.js приложение | Frontend тулинг для сборки |
requirements.txt |
Python приложение | Зависимости для build-стадии |
Решение: Добавьте builder: docker в .hive.yml, если проект использует Dockerfile с multi-stage сборкой или Paketo неверно определяет тип проекта.
Build slow: downloading builder each time¶
Решение: Buildpack builder кешируется в Docker. Если кеш не сохраняется между CI runs, это нормально для dind. Первый build будет медленным (~3-5 минут), последующие быстрее.
Test¶
Test fails: timeout¶
Причины:
- Сервис стартует дольше 30 секунд — увеличьте таймаут:
hive test --timeout 60 - Неправильный
healthPath— проверьте что endpoint существует и возвращает 2xx - Неправильный
port— сервис слушает на другом порту
Test fails: container exited¶
Контейнер упал при старте. Смотрите логи в JUnit отчёте или запустите контейнер вручную:
Test fails: connection refused¶
Сервис стартовал, но не слушает на указанном порту.
Проверьте: сервис должен слушать на 0.0.0.0, не на 127.0.0.1 или localhost. В контейнере localhost — это только сам контейнер.
Deploy¶
Deploy stuck: ArgoCD sync pending¶
ArgoCD не может синхронизировать приложение.
Проверьте:
- ArgoCD UI:
https://argocd.stage.svcik.org(staging) илиhttps://argocd.svcik.org(production) - Найдите ваше приложение:
{namespace}-{name} - Посмотрите Events и Sync Status
Deploy fails: ImagePullBackOff¶
Причины:
- Образ не собран — убедитесь что build прошёл успешно
- Registry credentials — проверьте что
CI_REGISTRY_USERиCI_REGISTRY_PASSWORDдоступны - Другой проект — в GitLab CI/CD Settings нужно разрешить pull из проекта hive-api
Deploy fails: namespace not found¶
Решение: Namespace создаётся автоматически при первом deploy через ArgoCD (CreateNamespace=true). Если проблема повторяется — обратитесь к платформенной команде.
Service не доступен¶
URL не отвечает¶
После успешного deploy сервис должен быть доступен по URL:
https://{name}.{namespace}.knative-staging.svcik.org (staging)
https://{name}.{namespace}.knative.svcik.org (production)
Проверьте:
- Правильный URL —
hive listпоказывает имена, namespace берётся из.hive.ymlили git remote - Knative revision — в ArgoCD проверьте что KnativeService создан
- TLS — wildcard сертификат создаётся автоматически, но может занять пару минут
Старая версия сервиса после deploy¶
Knative использует revisions. Если новый revision не проходит probes, Knative продолжает показывать старую версию.
Проверьте:
- Посмотрите revision status в ArgoCD
- Проверьте
healthPath— новая версия может отвечать на другом пути - Проверьте
lifecycle— возможно startup probe таймаутится
Это защита, не баг
Knative специально держит старый revision пока новый не пройдёт все probes. Это предотвращает даунтайм.
CI Pipeline¶
Pipeline не запускается¶
Проверьте:
- Push в default branch (обычно
mainилиmaster) .gitlab-ci.ymlв корне репозитория- Pipeline не отключен в Settings → CI/CD
generate-pipeline fails¶
Решение: hive ci --global ищет .hive.yml от корня репозитория. Убедитесь что файл существует и называется именно .hive.yml (с точкой в начале).
Всё ещё не работает?¶
Обратитесь к платформенной команде с информацией:
- Ссылка на failed pipeline
- Имя сервиса и namespace
- Содержимое
.hive.yml - Описание проблемы