Gitlab repocheck 發現懸空斑點並將文字標記為失敗

Gitlab repocheck 發現懸空斑點並將文字標記為失敗

我有一個自架的 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 個提交圖表中不存在的提交。

在我的本地存儲庫中,大多數提交仍然存在,並且它們確實無法訪問,因此git gc伺服器上的 a 刪除了本地存儲庫中仍然存在的那些提交。我似乎沒有丟失合併請求,所以對我來說,為什麼 gitlab 認為這是一個問題沒有意義。

可悲的是官方文檔除了告訴找到repocheck.log文件和/或單擊之外,對於做什麼非常模糊清除所有儲存庫檢查如果錯誤仍然存在。這根本沒有幫助,因為即使點擊之後清除所有儲存庫檢查,我仍然遇到同樣的錯誤。那麼 gitlab 實際測試的是什麼以及為什麼失敗呢?

答案1

  1. 尋找您從 GitLab http://yourgitlab_link/admin/projects?last_repository_check_failed=1 收到的「在 GitLab 管理面板中查看受影響的專案」連結上失敗的所有儲存庫

  2. 檢查/var/log/gitlab/gitlab-rails/repocheck.log專案管理區域中觸發「觸發儲存庫檢查」時產生的檔案。如果檔案為空,則再次手動觸發儲存庫檢查。即使檔案是否為空,此步驟也不是那麼重要,因為您將使用下面描述的命令 fsck 獲得類似的輸出。

  3. 開啟特定專案選單->管理->專案->您的專案並蒐索“Gitaly 相對路徑” @hashed/48/b3/48b361d46638bfa4eee090c158a750a69c7beec3a62e703e2801125551b1b157.git

  4. 前往 docker 控制台(連接到容器)或 Gitlab Omnibus 伺服器的控制台,並在該特定儲存庫命令上執行 fsck 命令。確保git在綜合安裝中以正確的使用者身分執行命令,否則文件將由所有者創建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 應清除錯誤和失敗

  5. 再次執行「觸發儲存庫檢查」以檢查儲存庫檢查是否已成功通過。如果成功,則此儲存庫不應出現在未能通過儲存庫檢查的儲存庫清單中(請參閱 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 > ... > 儲存庫檢查 > 使用命令列執行檢查

(選擇最適合您的安裝的文件版本)

相關內容