
У меня есть размещенный на собственном сервере экземпляр Gitlab, и внезапно один из моих проектов начинает отправлять мне электронные письма с сообщением о том, что проверка репозитория не пройдена.
Я запускаю gitlab-15.0.0-ee
через docker. Я проверил файл журнала, repocheck.log
и вот его содержимое:
E, [2022-06-07T19:08:10.599782 #435] ERROR -- : xxx/xxx: Could not fsck repository: dangling blob ed44e089d0eaf14fc152871bdca12aa6de01a5f1
dangling blob 4317819507d8e4e3ddcce6f3c01b8890e56cc157
dangling commit 2b1f190885dae6bbef0986cd50bc61c790331312
dangling blob 0f7c7218e71e1bd8b964184e149c214734d41944
dangling blob 6f16132326f43f1fd3a9a9cd717830643a162c8a
dangling commit 3b87a380a8095fe83fed257fd89e178323b89bea
dangling commit 14ca539d07483fc309f94cea685fc893a3efaf51
dangling commit 3cf64b574d2ecbc4ffe06559f9495db22bb5f2c9
dangling blob 535b94cb0a9048bbe45eb35ba53a02fe795be823
dangling commit 6778eef6143982b0d96f2934e515b36254e9a31f
dangling commit 0294e6bca9f2a5cacd7bbea61c62e5b5d92eb98f
dangling blob 4144f7437938ea8b0fe5ce6c8a498995b4f96f7c
dangling blob b64cd7abaa200ac4fea060b0dfb8542e260cb301
dangling blob 90545fea55b5e5c1f6245281ebac02b1dd8bfd04
error: Could not read 0957f8065b8fecfa80005eafa673a2a8b67ddbed
failed to parse commit 0957f8065b8fecfa80005eafa673a2a8b67ddbed from object database for commit-graph
error: Could not read 0a70090f6519febb2edbd9c416b5dff46d92d1a1
failed to parse commit 0a70090f6519febb2edbd9c416b5dff46d92d1a1 from object database for commit-graph
error: Could not read 126be254518dfd5b29a553fcfe7843787cbeed08
....
и в файле есть еще около 200 коммитов, которых нет в графике коммитов.
В моем локальном репозитории большинство этих коммитов все еще присутствуют, и они действительно недоступны, поэтому a git gc
на сервере удалил те коммиты, которые все еще присутствуют в моем локальном репозитории. Я, кажется, не пропускаю запросы на слияние, поэтому мне непонятно, почему gitlab считает это проблемой.
К сожалению,официальная документацияочень расплывчато о том, что делать, кроме как сказать найти repocheck.log
файл и или нажать наОчистить все проверки репозиторияесли ошибка сохраняется. Это вообще не помогает, потому что даже после нажатия наОчистить все проверки репозитория, я все еще получаю ту же ошибку. Так что же на самом деле тестирует gitlab и почему он терпит неудачу?
решение1
Найдите все репозитории, в которых произошел сбой, по ссылке «Просмотреть затронутые проекты в панели администратора GitLab», которую вы получили от GitLab http://yourgitlab_link/admin/projects?last_repository_check_failed=1
Проверьте
/var/log/gitlab/gitlab-rails/repocheck.log
файл, который генерируется при запуске «Trigger repository check» в области администрирования проекта. Если файл пуст, то снова вручную запустите проверку репозитория. Этот шаг не так важен, даже если файл пустой или нет, потому что вы получите похожий вывод с командой fsck, описанной немного ниже.Откройте меню конкретного проекта->Администрирование->Проекты->ваш проект и найдите «Относительный путь Gitaly».
@hashed/48/b3/48b361d46638bfa4eee090c158a750a69c7beec3a62e703e2801125551b1b157.git
Перейдите в консоль Docker (подключитесь к контейнеру) или в консоль сервера Gitlab Omnibus и выполните команду fsck для этого конкретного репозитория.Обязательно запускайте команду от имени правильного пользователя
git
при установке Omnibus., в противном случае создаются файлы с владельцемroot
, в которые gitlab не может записывать:/opt/gitlab/embedded/bin/git -C /var/opt/gitlab/git-data/repositories/@hashed/48/b3/48b361d46638bfa4eee090c158a750a69c7beec3a62e703e2801125551b1b157.git fsck
и проверьте, нет ли ошибок типаerror: Could not read 098b53ffbe581e25b… failed to parse commit 098b53ffbe581e25b… from object database for commit-graph
теперь запустите сборщик мусора gc с помощью
/opt/gitlab/embedded/bin/git -C /var/opt/gitlab/git-data/repositories/@hashed/48/b3/48b361d46638bfa4eee090c158a750a69c7beec3a62e703e2801125551b1b157.git gc
и проверьте еще раз репозиторий с помощью fsck
/opt/gitlab/embedded/bin/git -C /var/opt/gitlab/git-data/repositories/@hashed/48/b3/48b361d46638bfa4eee090c158a750a69c7beec3a62e703e2801125551b1b157.git fsck
и ошибки и сбои должны быть очищенызапустите еще раз «Trigger repository check» в check, если проверка репозитория прошла успешно. Если проверка прошла успешно, то этот репозиторий не должен быть в списке репозиториев, которые не прошли проверку репозитория (см. затронутые проекты в панели администратора GitLab) или http://yourgitlab_link/admin/projects?last_repository_check_failed=1
Источник:https://forum.gitlab.com/t/gitlab-projects-failed-their-last-repository-check/19147/3
решение2
См. документацию GitLab:
Администрирование GitLab > ... > Проверки репозитория > Запуск проверки с помощью командной строки
(выберите версию документации, которая лучше всего соответствует вашей установке)