Разбираем, как правильно очищать pipelines, jobs, artifacts и историю коммитов в актуальных версиях GitLab (PostgreSQL 16, partitioned CI schema). Без устаревших DELETE FROM ci_builds; и без поломки инстанса.
Кратко: не лезем слепо в SQL → используем Rails console или TRUNCATE CASCADE → учитываем partitioned tables → после очистки делаем vacuum.
Актуальные основные таблицы:
ci_pipelinesci_running_buildsci_pending_buildsci_pipeline_artifactsci_pipeline_metadataci_build_trace_chunksМногие из них — partitioned. Это значит, что обычный DELETE не всегда корректен.
Самый правильный способ — через встроенные модели GitLab.
sudo gitlab-rails console
project = Project.find_by_full_path('group/project')
project.ci_pipelines.destroy_all
Ci::JobArtifact.destroy_all
Ci::Build.destroy_all
Это безопасно, потому что GitLab сам корректно обработает связи и каскады.
Подключаемся:
sudo gitlab-psql
Сначала смотрим актуальные таблицы:
\dt ci_*
Если нужно очистить вручную:
DELETE FROM ci_pipeline_artifacts;
DELETE FROM ci_pipeline_metadata;
DELETE FROM ci_pipeline_messages;
DELETE FROM ci_build_trace_chunks;
DELETE FROM ci_running_builds;
DELETE FROM ci_pending_builds;
DELETE FROM ci_pipelines;
Порядок важен. Иначе FK не даст удалить записи.
Если таблицы partitioned — лучше использовать:
TRUNCATE ci_pipelines CASCADE;
Проверить partition:
SELECT relname
FROM pg_class
WHERE relkind = 'p';
TRUNCATE быстрее и безопаснее для полной очистки CI.
После очистки:
VACUUM FULL ANALYZE;
Самый продовый способ:
gitlab-rake gitlab:artifacts:cleanup
gitlab-rake gitlab:ci:cleanup
Для удаления всех pipelines:
gitlab-rake gitlab:ci:delete_all_pipelines
Этот способ не ломает внутренние зависимости.
Если нужно начать историю проекта "с нуля":
git checkout --orphan clean-branch
git add .
git commit -m "Initial clean commit"
git branch -D main
git branch -m main
git push -f origin main
Важно: это перепишет историю. Все старые commit SHA исчезнут.
GitLab последних версий сильно усложнил CI-схему. Старые методы 2018–2021 годов больше не актуальны.
Если цель — уменьшить размер базы, сначала используйте встроенные cleanup-механизмы, а не прямой SQL.