Перейти к содержанию

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

Cannot connect to the Docker daemon

Решение: hive build требует Docker daemon. В CI убедитесь что docker:27-dind указан как service. Локально — Docker Desktop должен быть запущен.

Build fails: Dockerfile не используется

Builder по умолчанию --- paketo. Даже если Dockerfile есть в директории, Hive не будет его использовать без явного указания:

builder: docker

Без этого Paketo анализирует файлы проекта и выбирает buildpack по файлам-маркерам (package.json, go.mod, nginx.conf и т.д.). Dockerfile полностью игнорируется.

Build fails: Paketo выбирает неправильный buildpack

"server" directive is not allowed here in /workspace/nginx.conf:1

Причина: 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

Health check timed out after 30s

Причины:

  1. Сервис стартует дольше 30 секунд — увеличьте таймаут: hive test --timeout 60
  2. Неправильный healthPath — проверьте что endpoint существует и возвращает 2xx
  3. Неправильный port — сервис слушает на другом порту

Test fails: container exited

Container exited with code 1

Контейнер упал при старте. Смотрите логи в JUnit отчёте или запустите контейнер вручную:

docker run -p 8080:8080 <image>

Test fails: connection refused

Сервис стартовал, но не слушает на указанном порту.

Проверьте: сервис должен слушать на 0.0.0.0, не на 127.0.0.1 или localhost. В контейнере localhost — это только сам контейнер.


Deploy

Deploy stuck: ArgoCD sync pending

ArgoCD не может синхронизировать приложение.

Проверьте:

  1. ArgoCD UI: https://argocd.stage.svcik.org (staging) или https://argocd.svcik.org (production)
  2. Найдите ваше приложение: {namespace}-{name}
  3. Посмотрите Events и Sync Status

Deploy fails: ImagePullBackOff

Failed to pull image: unauthorized

Причины:

  1. Образ не собран — убедитесь что build прошёл успешно
  2. Registry credentials — проверьте что CI_REGISTRY_USER и CI_REGISTRY_PASSWORD доступны
  3. Другой проект — в 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)

Проверьте:

  1. Правильный URLhive list показывает имена, namespace берётся из .hive.yml или git remote
  2. Knative revision — в ArgoCD проверьте что KnativeService создан
  3. TLS — wildcard сертификат создаётся автоматически, но может занять пару минут

Старая версия сервиса после deploy

Knative использует revisions. Если новый revision не проходит probes, Knative продолжает показывать старую версию.

Проверьте:

  1. Посмотрите revision status в ArgoCD
  2. Проверьте healthPath — новая версия может отвечать на другом пути
  3. Проверьте lifecycle — возможно startup probe таймаутится

Это защита, не баг

Knative специально держит старый revision пока новый не пройдёт все probes. Это предотвращает даунтайм.


CI Pipeline

Pipeline не запускается

Проверьте:

  1. Push в default branch (обычно main или master)
  2. .gitlab-ci.yml в корне репозитория
  3. Pipeline не отключен в Settings → CI/CD

generate-pipeline fails

No .hive.yml files found

Решение: hive ci --global ищет .hive.yml от корня репозитория. Убедитесь что файл существует и называется именно .hive.yml (с точкой в начале).


Всё ещё не работает?

Обратитесь к платформенной команде с информацией:

  1. Ссылка на failed pipeline
  2. Имя сервиса и namespace
  3. Содержимое .hive.yml
  4. Описание проблемы