インテグリティ・チェック レーキ・タスク

GitLabは様々なコンポーネントのインテグレーションをチェックするRakeタスクを提供しています。

リポジトリの完全性

Gitはとても回復力があり、データのインテグリティの問題を防ごうとしていますが、うまくいかないこともあります。 以下のRakeタスクは、GitLab管理者が問題のあるリポジトリを診断して修正できるようにするためのものです。

インテグリティを判断するためにチェックされる項目は3つあります。

  1. git リポジトリファイルシステムチェック (git fsck). このステップでは、リポジトリ内のオブジェクトの接続性と有効性を検証します。
  2. リポジトリディレクトリのconfig.lock をチェックします。
  3. refs/headsにブランチ/参照ロックファイルがないかチェックします。

注意すべき点は、config.lock や参照ロックが存在するだけでは必ずしも問題があるとは限らないということです。ロックファイルは、Git や GitLab がリポジトリに対するオペレーションを実行する際に日常的に作成・削除されます。 これらはデータの整合性の問題を防ぐためのものです。しかし、Git のオペレーションが中断された場合、これらのロックが適切にクリーンアップされない可能性があります。

以下の症状は、リポジトリの整合性に問題があることを示している可能性があります。 ユーザーがこれらの症状を経験した場合、以下に説明する Rake タスクを使用して、問題の原因となっているリポジトリを正確に特定することができます。

  • コードをプッシュしようとするとエラーが発生します。remote: error: cannot lock ref
  • GitLabダッシュボードを表示するとき、または特定のプロジェクトにアクセスするときに500エラーが発生します。

すべてのGitLabリポジトリの確認

このタスクはGitLabサーバー上のすべてのリポジトリをループし、先に説明したインテグリティチェックを実行します。

オムニバス・インストール

sudo gitlab-rake gitlab:git:fsck

ソースインストール

sudo -u git -H bundle exec rake gitlab:git:fsck RAILS_ENV=production

アップロードされたファイルのインテグレーション

GitLabインテグレーションには、様々な種類のファイルをユーザーがアップロードすることができます。 これらの整合性チェックにより、ファイルが見つからないことを検出することができます。 さらに、ローカルに保存されたファイルについては、アップロード時にチェックサムが生成されデータベースに保存され、これらのチェックにより現在のファイルと照合されます。

現在、完全性チェックは以下のタイプのファイルでサポートされています:

  • CIアーティファクト(バージョン10.7.0から使用可能)
  • LFSオブジェクト(バージョン10.6.0から使用可能)
  • ユーザーアップロード(バージョン10.6.0から利用可能)

オムニバス・インストール

sudo gitlab-rake gitlab:artifacts:check
sudo gitlab-rake gitlab:lfs:check
sudo gitlab-rake gitlab:uploads:check

ソースインストール

sudo -u git -H bundle exec rake gitlab:artifacts:check RAILS_ENV=production
sudo -u git -H bundle exec rake gitlab:lfs:check RAILS_ENV=production
sudo -u git -H bundle exec rake gitlab:uploads:check RAILS_ENV=production

これらのタスクは、特定の値を上書きするために使用できる環境変数も受け入れます:

変数 タイプ 説明
BATCH 整数 バッチのサイズを指定します。 デフォルトは200です。
ID_FROM 整数 値も含めて、開始するIDを指定します。
ID_TO 整数 値も含めて、終了するID値を指定します。
VERBOSE ブーリアン 故障が要約されるのではなく、個別にリスト化される原因。
sudo gitlab-rake gitlab:artifacts:check BATCH=100 ID_FROM=50 ID_TO=250
sudo gitlab-rake gitlab:lfs:check BATCH=100 ID_FROM=50 ID_TO=250
sudo gitlab-rake gitlab:uploads:check BATCH=100 ID_FROM=50 ID_TO=250

出力例:

$ sudo gitlab-rake gitlab:uploads:check
Checking integrity of Uploads
- 1..1350: Failures: 0
- 1351..2743: Failures: 0
- 2745..4349: Failures: 2
- 4357..5762: Failures: 1
- 5764..7140: Failures: 2
- 7142..8651: Failures: 0
- 8653..10134: Failures: 0
- 10135..11773: Failures: 0
- 11777..13315: Failures: 0
Done!

冗長出力の例:

$ sudo gitlab-rake gitlab:uploads:check VERBOSE=1
Checking integrity of Uploads
- 1..1350: Failures: 0
- 1351..2743: Failures: 0
- 2745..4349: Failures: 2
  - Upload: 3573: #<Errno::ENOENT: No such file or directory @ rb_sysopen - /opt/gitlab/embedded/service/gitlab-rails/public/uploads/user-foo/project-bar/7a77cc52947bfe188adeff42f890bb77/image.png>
  - Upload: 3580: #<Errno::ENOENT: No such file or directory @ rb_sysopen - /opt/gitlab/embedded/service/gitlab-rails/public/uploads/user-foo/project-bar/2840ba1ba3b2ecfa3478a7b161375f8a/pug.png>
- 4357..5762: Failures: 1
  - Upload: 4636: #<Google::Apis::ServerError: Server error>
- 5764..7140: Failures: 2
  - Upload: 5812: #<NoMethodError: undefined method `hashed_storage?' for nil:NilClass>
  - Upload: 5837: #<NoMethodError: undefined method `hashed_storage?' for nil:NilClass>
- 7142..8651: Failures: 0
- 8653..10134: Failures: 0
- 10135..11773: Failures: 0
- 11777..13315: Failures: 0
Done!

LDAPチェック

LDAPチェックRakeタスクは、バインドDNとパスワード認証情報(設定されている場合)をテストし、LDAPユーザーのサンプルをリストアップします。このタスクは、gitlab:check タスクの一部として実行されますが、独立して実行することもできます。詳細は、LDAP Rakeタスク - LDAPチェックを参照してください。